Ruby &:-@ 有些疑惑

lilu · March 20, 2012 · Last by lilu replied at March 20, 2012 · 2941 hits

[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 的实例方法

You need to Sign in before reply, if you don't have an account, please Sign up first.