Ruby &:-@ 有些疑惑

lilu · 2012年03月20日 · 最后由 lilu 回复于 2012年03月20日 · 2949 次阅读

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

需要 登录 后方可回复, 如果你还没有账号请 注册新账号