gpt4 book ai didi

ruby - 在 object.initialize 中,使用 self 是不是更好。超过 @?

转载 作者:数据小太阳 更新时间:2023-10-29 06:53:39 25 4
gpt4 key购买 nike

有一种约定,在可能的情况下,通过对象的实例变量来引用对象的属性。 Practical Object-Oriented Design in Ruby说:

Always wrap instance variables in accessor methods instead of directly referring to variables...

这显示了一个例子,我已经释义了:

class Gear
attr_reader :chainring, :cog
...
def ratio
# this is bad
# @chainring / @cog.to_f
# this is good
chainring / cog.to_f
end

我看到使用实例变量创建新对象的最常见方法是:

class Book
attr_accessor :title
def initialize(title)
@title = title
end
end

@title= 直接访问实例变量title假设我们遵循“实例变量之上的属性”约定,使用 self.title= 是否更合适,which would tell the object to send itself the message title= ,从而使用属性写入方法,直接覆盖实例变量?

class Book
attr_accessor :title
def initialize(title)
self.title = title
end
end

书上讲了“属性高于实例变量”,是指读取实例变量,但它不也适用于写入吗?

最佳答案

The book talks about 'attribute over instance variable' with reference to reading an instance variable, but doesn't it also apply to writing?

是的,它也适用于写作。但是,initialize 方法比较特殊,因为它负责设置对象。当您使用 setter 方法时,您这样做是因为 setter 可能会做一些额外的工作(例如 Rails 中的属性 setter )。在初始化程序中,您通常不希望有任何副作用,因此您可以直接访问实例变量。

关于ruby - 在 object.initialize 中,使用 self 是不是更好。超过 @?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21036031/

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