如何检查实例名称是否已存在

时间:2015-07-13 18:15:57

标签: ruby class

如何创建它以便每次创建类User的新实例时,实例将被命名为user#(#=一个数字),以便每个用户都有不同的号。

所以它做了这样的事情:

user1 = User.new("user", "password")
user2 = User.new("other_user", "password")
user3 = User.new("other_user", "password")
...

但如果user1已经存在,我希望它能够在创建新用户时将其命名为user2,而不是重新创建user1,依此类推。

1 个答案:

答案 0 :(得分:3)

以您的思考方式定义变量会使以后很难读取变量。想象您想如何再次读取值?您需要自己跟踪存在多少变量。在这种情况下,无需使用元编程。

避免此问题的数据结构是Array,它允许您存储元素并通过它们在数组中的位置再次读取它们:

users = []
users << User.new("user", "password")
users << User.new("other_user", "password")
users << User.new("other_user", "password")

users
#=> returns all users in an array

users.size
#=> returns the number of users in the array

users[0]
#=> returns the first User

users[n]
#=> returns the n User in this array

在我看来,OP想要(或至少不关心)重复。但是,如果你想避免重复,你可以在添加这样的新元素之前检查重复项:

user = User.new("other_user", "password")
users << user unless users.include?(user)

或者您可以通过调用users.uniq删除重复项。