在 RubyMonk 上查看这段代码:
class Item
def initialize(item)
@item = item
end
def show
puts "The item name is: #{self}"
end
def to_s
"#{@item}"
end
end
Item.new("potion").show
代码通过了,但是 self 变量的使用对我来说有点模棱两可。您可以在 show 方法中轻松地将 to_s 替换为 self 并获得相同的结果。有人可以解释两种插值之间的区别以及为什么/如何在这里使用 self 吗? 此外,如果没有方法 to_s,代码将返回一个代理。这里定义to_s有什么意义呢?
最佳答案
字符串插值隐式调用对象的 to_s
方法。因此,当您在 Item
上定义 to_s
方法时,您就是在明确告诉该对象如何根据字符串表示自己。在这种情况下使用 self
是因为在 Item
对象的插值中存在对 to_s
的隐式调用。定义 to_s
显式 告诉 Item
如何在字符串中呈现自己。
有关更多详细信息,请查看 this excellent post on explicit vs. implicit conversion methods.
关于Ruby - 在类方法中引用 self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27791208/