【发布时间】:2015-03-03 16:19:29
【问题描述】:
在 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是将对象转换为字符串的标准 Ruby 方法。通过在class Item中定义它,您已经使其在该类中可用,因此当您使用#{self}作为字符串打印对象时,Ruby 足够聪明,可以使用to_s方法。如果没有to_s方法,您只需检查对象引用。