为什么在减号和数字之间允许有空格?

时间:2016-05-27 17:32:59

标签: ruby

这些是预期的:

-3 # => -3
0 - 3 # => -3

但是这里发生了什么:

- 3 # => -3

我的第一个想法是-是隐含self的方法,即self.-(3),因此在KernelObject上定义。但尝试此操作会导致NoMethodError: undefined method

1 个答案:

答案 0 :(得分:7)

Ruby有一个非常宽容的语法,并允许这样的事情。这被解析为一元减号运算符。它否定了右边的任何东西。

也类似:

-(3)
# => -3
-(-(-3))
# => -3
- (3)
# => -3

在方法调用中省略大括号的方式类似:foo x有效,但隐含foo(x)。你也可以做foo (x)虽然这会导致歧义,所以通常不赞成。

正如Dave Newton指出的那样,内部实际上是这样的:

3.send(:-@)