Ruby 运算符 "+"行为因代码中的间距而异?

标签 ruby unary-operator

我遇到了一些奇怪的情况(我使用的是 Ruby 1.9.1)。案例场景为:

class D
    ...
    def self.d6
        1+rand(6)
    end
    ...
end

v = D::d6+2    # fine and dandy
v = D::d6 +2   # in `d6': wrong number of arguments (1 for 0) (ArgumentError)
v = D::d6 + 2  # fine and dandy

为什么第二种情况中的“+2”被视为“正2”而不是“2加法”?

最佳答案

与 ruby​​ 中的 - 相同的 + 被重载,以使语法看起来更好。

当没有空格时,Ruby 解析器会将 + 识别为在 d6 结果上调用的方法,该结果是一个 Integer 。 对于 + 前后有空格的版本也是如此。

但是:在 Ruby 的运算符优先级中,作为一元运算符的 + 定义在作为二元运算符的 + 之前(其他语言中也经常出现这种情况) .

因此,如果 + 之前有空格但后面没有空格,Ruby 解析器会将其识别为 d6(+2) ,这符合错误消息。

关于Ruby 运算符 "+"行为因代码中的间距而异?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22475286/

相关文章:

javascript - 解释 javascript 中的 +var 和 -var 一元运算符

f# - 为什么 F# 有一个一元加号运算符?

Ruby 全局作用域

ruby-on-rails - ruby & :method syntax

ruby-on-rails - 如何创建复杂的 Nested -> Belongs To 对象?

ruby-on-rails - Ruby on Rails : "Error installing rails: rdoc requires json"

用于从索引到字符串末尾的子字符串的 Ruby 习语

javascript - JavaScript 中的++someVariable 与 someVariable++

c - 难以理解指针操作

php - perl unary ~ 没有给出预期的结果