【问题标题】:When Should I use expression interpolation in Ruby?什么时候应该在 Ruby 中使用表达式插值?
【发布时间】:2012-07-24 12:31:25
【问题描述】:

我对在方法中使用表达式插值感到困惑。最初我以为我可以传递任何类型的表达式,比如name.capitalize,但我也可以在没有表达式插值的情况下通过。这是两种情况。只需在irb 上执行以下两种方法,两种方法的结果相同。我正在使用 Ruby 1.9.3

1.

def say_goodnight(name)
 result = "Good night, " + name.capitalize
 return result
end

puts say_goodnight('uncle')

2.

def say_goodnight(name)
  result = "Good night, #{name.capitalize}"
  return result
end

puts say_goodnight('uncle')

两种方式都会产生类似的输出

Good night, Uncle

所以我的问题是何时应该在 Ruby 中使用表达式插值?以及何时应该在 Ruby 中使用参数?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 rubygems


    【解决方案1】:

    读取更清晰的通常更好。例如,如果字符串包含多个变量引用,每个变量引用由几个字符分隔,则表达式的“+”形式会变得复杂且不清楚,而插值字符串则更为明显。另一方面,如果表达式相对复杂,最好将它们与字符串的其他组件分开。

    所以,我认为如下:

    "Hello #{yourname}, my name is #{myname} and I'm #{mood} to see you."
    

    更清晰
    "Hello " + yourname + ", my name is " + myname + " and I'm " + mood + "to see you."
    

    但如果我有复杂的表达式,我可能想把它们分开到不同的源代码行,用“+”更好地连接。

    【讨论】:

    • 这些都是好点。我将补充一点,插值将通过调用#to_s 隐式包装被插值的表达式。因此,如果您希望在字符串中对其求值的表达式不求值为 String 的实例,则使用插值而不是串联会更简洁,以节省对 #to_s 的显式调用。
    【解决方案2】:

    我与@djconnel 合作——使用读得最好、传达最多信息、简化修改和/或扩展、简化调试等等的任何一个。

    这是昨天刚刚讨论过的;见Strange Ruby Syntax?

    在您的具体示例中,我会使用字符串插值,因为该方法实际上只是:

    def say_goodnight(name)
      "Good night, #{name.capitalize}"
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2011-04-15
      • 2017-04-10
      • 2012-03-19
      相关资源
      最近更新 更多