我想知道Ruby中print x
和print "#{x}"
之间的区别是什么。我们使用哪一个真的很重要吗?
答案 0 :(得分:1)
print "#{foo}"
- 这里你正在进行字符串插值。foo
将引用任何对象(如果它是一个局部变量),从foo
返回(如果它是一个方法) ,结果String#to_s
将被应用。
print foo
将输出该对象将被foo
引用(如果它是一个局部变量),从foo
返回(如果它是一个方法),该结果{{ 1}}将被应用。
答案 1 :(得分:1)
表达式print "#{foo}"
大致转换为print foo.to_s
。
Kernel#print
是IO#print
周围的薄包装,最终会调用IO#write
。来自write
的文档:
[...]如果参数不是字符串,则使用
to_s
将其转换为字符串。 [...]
所以最后,几乎没有差别。然而,print "#{foo}"
将首先创建foo
的字符串表示形式,然后将该结果插入到一个空字符串中 - 但我认为可以(应该)由解释器轻松优化。
答案 2 :(得分:0)
没有区别,他们在某些时候都隐含地适用to_s
。您应该使用print x
而不是print "#{x}"
。为什么你想知道使用哪个? print "#{x}"
显然不如print x
简单。
答案 3 :(得分:0)
如果您只需要打印那件东西,通常会使用print name
。
如果要在其他字符串中插入值,则使用字符串插值。
print "My name is #{my_name} and I am currently #{my_age} years old."
甚至可以插入一些逻辑:
print "My name is #{my_name.capitalize} and"
print "I am currently #{my_age} year#{my_age>1 ? 's':''} old." #print years instead of year if age is greater than 1.