Ruby:这两者有什么区别?

时间:2014-02-01 12:22:38

标签: ruby printing coding-style

我想知道Ruby中print xprint "#{x}"之间的区别是什么。我们使用哪一个真的很重要吗?

4 个答案:

答案 0 :(得分:1)

print "#{foo}" - 这里你正在进行字符串插值。foo将引用任何对象(如果它是一个局部变量),从foo返回(如果它是一个方法) ,结果String#to_s将被应用。

print foo将输出该对象将被foo引用(如果它是一个局部变量),从foo返回(如果它是一个方法),该结果{{ 1}}将被应用。

答案 1 :(得分:1)

表达式print "#{foo}"大致转换为print foo.to_s

Kernel#printIO#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.