【发布时间】:2011-08-16 04:49:09
【问题描述】:
我还在学习 Ruby,我很好奇在这种情况下使用类变量、常量还是局部变量是否合适。
在我下面的代码示例中(从固定字符集中生成随机用户名),将@username 分配为实例变量是相当明显的。但我很好奇我应该将字符集分配为常量还是类变量。在这种情况下使用另一种变量类型有什么好处?
在当前示例中,_charset 在每个实例中计算。 (如果我的假设是错误的,请纠正我。)我还假设计算将作为类变量和常量在实例之间共享(而不是重新计算)?
class NewAccount
def initialize
@username = self.generate_username
end
def generate_username
_charset = ('a'..'z').to_a + ('0'..'9').to_a
_newusername = Array.new(20) { _charset[rand(_charset.length)] }.join
return _newusername
end
end
【问题讨论】:
-
请注意 a) 使用带有前导下划线的 _variables 和 b) 显式返回是方法的最后一个表达式,这不是 Ruby 的惯用语。此外,您可以将该行写为: new_username = 20.times.map { charset.choice }.join
-
另一种创建用户名的方法是:@username = rand(36**20).to_s(36)
标签: ruby constants scope instance-variables local-variables