使用class的名称进行字符串插值是什么意思?

What does it mean to use the name of a class for string interpolation?

以下代码摘自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 不是字符串。

语句 #{fido} 隐式调用 fido.to_s。这就是为什么你得到 "Fido",这是 @name.

的值

其实"My dog is #{fido.to_s}"是多余的,因为#{}位会调用to_s.

这是格式化字符串的另一种方式:

"My dog is %s" % fido

这几乎是 #{} 语法的另一个版本。上面,%s 指示格式化程序它需要在 fido 上调用 to_s。这样做是多余的 "My dog is %s" % fido.to_s,但是,它仍然有效。