使用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
,但是,它仍然有效。
以下代码摘自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
,但是,它仍然有效。