【发布时间】:2011-10-19 04:11:40
【问题描述】:
在以下 Ruby 代码中 @ 代表什么:
module TestRocket
extend Module.new { attr_accessor :out }
def _test(a, b); send((call rescue()) ? a : b); end
def +@; _show _test :_pass, :_fail end
def -@; _show _test :_fail, :_pass end
def ~@; _show _pend; end
def !@; _show _desc; end
def _show(r); (TestRocket.out || $>) << r; r end
def _pass; " OK\n"; end
def _fail; " FAIL @ #{source_location * ':'}\n"; end
def _pend; "PENDING '#{call}' @ #{source_location * ':'}\n"; end
def _desc; " FIRE '#{call}'!\n"; end
end
Proc.send :include, TestRocket
然后这被用作:
+-> { Die.new(2) }
--> { raise }
+-> { 2 + 2 == 4 }
函数名中的@怎么变成'->'?
【问题讨论】:
-
好问题。我从来没有见过这个。但是如果你尝试在没有它的情况下运行
+-> { 2+2==4 },你会得到一个错误NoMethodError: undefined method+@' for #<0x0000010>0x0000010>
标签: ruby