gpt4 book ai didi

ruby 风格和实例变量

转载 作者:太空宇宙 更新时间:2023-11-03 17:11:15 25 4
gpt4 key购买 nike

我在很多代码中看到的东西:

class Foo
attr_accessor :bar

# lots of code omitted

def baz
'qux' if bar
end
end

baz 方法的确切形式并不太重要——只是这里的 bar 是对实例变量 @bar 的 getter 方法的引用,调用自在实例的类中。我更愿意明确地从 @bar 中检索值。对此有何意见?我从未在 ruby style guide 中看到任何内容或类似内容。我个人发现,使用前者会使阅读和理解变得更加困难,尤其是当类的长度超过数百行时。

编辑:

也许为了说明我认为这种设计的尴尬之处,让我们重新评估一个非常标准的初始化方法:

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。

最佳答案

通过 getter 访问属性具有提供封装的优点。使用实例变量来存储值在某些方面是一个实现细节。当然,这是否合适是视情况而定的。但是,我不记得读过任何关于此风格问题的明确内容。

找到 https://softwareengineering.stackexchange.com/questions/181567/should-the-methods-of-a-class-call-its-own-getters-and-setters ,它从与语言无关的角度讨论了这个问题。还发现 https://www.ruby-forum.com/topic/141107 ,这是特定于 ruby​​ 的,尽管它没有开辟任何新领域,更不用说暗示 Ruby 标准了。

更新:刚刚在 http://www.amazon.com/Practical-Object-Oriented-Design-Ruby-Addison-Wesley/dp/0321721330/ref=sr_1_1?s=books&ie=UTF8&qid=1376760915&sr=1-1 的第 24 页看到以下声明,一本关于 Ruby 的备受推崇的书:“隐藏变量,甚至从定义它们的类中,通过将它们包装在方法中。” (强调)。它继续给出类中使用访问器方法进行访问的方法示例。

关于ruby 风格和实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18151482/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com