【问题标题】:Ruby: Difference between these two?Ruby:这两者的区别?
【发布时间】:2014-02-01 12:22:38
【问题描述】:

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

【问题讨论】:

  • 你了解#{}语法在一般情况下的作用吗?

标签: ruby printing coding-style


【解决方案1】:

表达式print "#{foo}" 大致翻译为print foo.to_s

Kernel#printIO#print 的一个薄包装,最终调用IO#write。来自write的文档:

[...] 如果参数不是字符串,它将使用to_s 转换为字符串。 [...]

所以最终,几乎没有区别。然而print "#{foo}" 将首先创建foo 的字符串表示,然后将结果插入一个空字符串——但我认为解释器可以(应该)轻松优化。

【讨论】:

  • 还有一点要记住,如果你回来对输出做更多的事情,字符串插值路由会更有吸引力。 print "this: #{foo}" 比 print "this" + foo.to_s 更容易阅读
【解决方案2】:

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

print foo 将输出 foo 引用的对象(如果是局部变量),从 foo 返回(如果是方法),在该结果上将应用 #to_s

【讨论】:

    【解决方案3】:

    没有区别,它们都在某些时候隐式地应用to_s。您应该使用print x 而不是print "#{x}"。你为什么想知道使用哪个? print "#{x}" 显然不如 print x 简单。

    【讨论】:

      【解决方案4】:

      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.
      

      【讨论】:

        猜你喜欢
        • 2014-03-26
        • 2011-04-06
        • 1970-01-01
        • 2013-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-02
        • 1970-01-01
        相关资源
        最近更新 更多