我在很多代码中看到的东西:
class Foo
attr_accessor :bar
# lots of code omitted
def baz
'qux' if bar
end
end
baz 方法的确切形式并不太重要 - 只是bar
这里是对实例变量的 getter 方法的引用@bar
,从实例的类中调用。我倾向于从@bar
显式检索值。对此有意见吗?我从未在ruby 样式指南或类似内容中看到任何内容。我个人发现,做前者会使阅读和理解变得更加困难,尤其是当类超过数百行时。
编辑:
也许为了说明我认为这种设计的尴尬之处,让我们重新评估一个非常标准的初始化方法:
class Foo
attr_accessor :bar, :qux
def initialize(bar, qux)
@bar = bar
@qux = qux
end
end
如果我们使用setter方法,我们不能bar = ?
类推。相反,我们有:
class Foo
attr_accessor :bar, :qux
def initialize(bar, qux)
self.bar = bar
self.qux = qux
end
end
这已经失去了第一个的一些优雅。我们有一个更灵活的设计,因为我们现在可以自由地重写我们的 setter 方法并取消attr_writer
. 但我只是在风格上提出了一些观点,感觉很像配置优于约定而不是相反,Russ Olsen 已经宣布了一种设计“模式”,不仅适用于 Rails,也适用于 Ruby。