[1,2,3].map &:-@
这个可以对数字数组求负值
疑惑主要是:-@这里,是传一个符号进来吗?它的名字是-@?@是自身对象的绑定吗?这里查了手册没看到解释,也许是我翻阅的不够深入
用 irb 测了一下 1.9.3p125 :001 > [1,2,3].map &:-@ => [-1, -2, -3]
一元减
-1.-@ => 1
From: numeric.c in Ruby Core (C Method): Number of lines: 5 Owner: Fixnum Visibility: public
static VALUE fix_uminus(VALUE num) { return LONG2NUM(-FIX2LONG(num)); }
返回本身的相反数
不是代表对自身对象的绑定,-@是 Fixnum 对象的方法:
1.methods.grep /@/ => [:-@, :+@]
这个写法就是标准的 block 调用无参方法的简写,等价于:
[1,2,3].map{|n| n.-@()}
+@,-@是 Numeric 的实例方法
@quakewang 感谢