以下代码摘自rubykoans about_classes.rb:
class Dog7
def initialize(initial_name)
@name = initial_name
end
def to_s
@name
end
end
我创建了Dog7
的实例:
fido = Dog7.new("Fido")
我理解以下内容:
"My dog is " + fido.to_s # => "My dog is Fido"
"My dog is #{fido.to_s}" # => "My dog is Fido"
我不明白为什么以下插值有意义并给出相同的结果:
"My dog is #{fido}" # => "My dog is Fido"
fido
不是字符串。
答案 0 :(得分:6)
语句#{fido}
隐式调用fido.to_s
。这就是为什么你得到" Fido",这是@name
的价值。
实际上,"My dog is #{fido.to_s}"
是多余的,因为#{}
位会调用to_s
。
以下是格式化字符串的另一种方法:
"My dog is %s" % fido
这几乎是#{}
语法的另一个版本。在上方,%s
向格式化程序表明需要在to_s
上调用fido
。 <{1}}是多余的,但它仍然有用。