【发布时间】:2014-02-01 12:22:38
【问题描述】:
我想知道print x 和print "#{x}" 在Ruby 中的区别是什么。我们使用哪一个真的很重要吗?
【问题讨论】:
-
你了解
#{}语法在一般情况下的作用吗?
标签: ruby printing coding-style
我想知道print x 和print "#{x}" 在Ruby 中的区别是什么。我们使用哪一个真的很重要吗?
【问题讨论】:
#{}语法在一般情况下的作用吗?
标签: ruby printing coding-style
表达式print "#{foo}" 大致翻译为print foo.to_s。
Kernel#print 是IO#print 的一个薄包装,最终调用IO#write。来自write的文档:
[...] 如果参数不是字符串,它将使用
to_s转换为字符串。 [...]
所以最终,几乎没有区别。然而print "#{foo}" 将首先创建foo 的字符串表示,然后将结果插入一个空字符串——但我认为解释器可以(应该)轻松优化。
【讨论】:
print "#{foo}" - 这里你正在做字符串插值。foo(如果它是一个局部变量)将引用任何对象,从foo(如果它是一个方法)返回,在那个结果上@987654324 @ 将被应用。
print foo 将输出 foo 引用的对象(如果是局部变量),从 foo 返回(如果是方法),在该结果上将应用 #to_s。
【讨论】:
没有区别,它们都在某些时候隐式地应用to_s。您应该使用print x 而不是print "#{x}"。你为什么想知道使用哪个? print "#{x}" 显然不如 print x 简单。
【讨论】:
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.
【讨论】: