【问题标题】:Syntax error when using << but not when using +=使用 << 时出现语法错误,但使用 += 时没有
【发布时间】:2015-09-27 05:23:46
【问题描述】:

开启ruby 1.8.7

为什么会这样:

string += method "value"

但这会引发语法错误:

string << method "remove reviewer"

在新版本的 ruby​​ 中是否有相同的行为?

【问题讨论】:

  • 是的,在更高版本的 Ruby 中也有相同的行为。 (我在 Ruby 2.2 上测试过)

标签: ruby syntax syntax-error


【解决方案1】:

您可以使用 &lt;&lt;=+ 的不同 Operator Precedence 和方法调用来解释这种行为。

Ruby 将您的第一个示例读取为:

string += (method "value")

但第二个为:

(string << method) "remove reviewer"

IMO 使用括号进行方法调用是一个好习惯,即使 Ruby 在很多情况下不需要它们。这使得代码更易读,更不容易出错:

string += method("value")
string << method("remove reviewer")

【讨论】:

    【解决方案2】:

    是的,在更高版本的 Ruby 中也有相同的行为。 (我在 Ruby 2.2 上测试过)。

    这是因为 Ruby 的operator precedence

    要解决这个问题,您可以在 &lt;&lt; 的情况下使用括号:

    string << method("remove reviewer")
    

    然后,它应该可以工作并且不会出现语法错误。

    或者,为了保持一致,您可以对它们都使用括号:

    string += method("value")
    string << method("remove reviewer")
    

    事实上,强烈建议在方法调用中使用括号 (),以避免出现您所询问的情况。请查看 this post 了解更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多