【发布时间】:2012-06-07 01:03:02
【问题描述】:
是否有计划实现 ruby 行为,类似于 CoffeeScript 在方法参数列表中指定实例变量名称的特性? 喜欢
class User
def initialize(@name, age)
# @name is set implicitly, but @age isn't.
# the local variable "age" will be set, just like it currently works.
end
end
我知道这个问题:in Ruby can I automatically populate instance variables somehow in the initialize method?,但所有解决方案(包括我自己的)似乎都不符合 ruby 的简单理念。
而且,这种行为会有什么缺点吗?
更新
其中一个原因是 ruby 社区的 DRY(不要重复自己)哲学。我经常发现自己需要重复参数变量的名称,因为我希望将它分配给同名的实例变量。
def initialize(name)
# not DRY
@name = name
end
我能想到的一个缺点是,如果一个方法没有主体,它可能看起来好像什么都不做。如果您正在快速扫描,这可能看起来像是无操作。但我认为只要有时间,我们就能适应。
另一个缺点:如果您在正文中设置其他实例变量,并且您试图通过将所有赋值放在开头来使其可读,则可能需要更多的认知“能力”才能看到赋值也发生在参数列表。但我认为这并不比看到一个常量或方法调用并不得不跳转到它的定义更难。
# notice: instance var assignments are happening in 2 places!
def initialize(@name)
@errors = []
end
【问题讨论】:
标签: ruby methods instance-variables argument-passing