【发布时间】:2012-12-07 19:01:26
【问题描述】:
如果函数以 lambda 形式存储在变量中,是否可以在对象上调用函数(向其发送消息)?
假设我有一个像 %w(a b c) 这样的数组
然后我可以链接方法,例如:
%w(a b c).reverse.map(&:upcase) # => ["C", "B", "A"]
是否可以将链接的方法调用提取到一个变量并将它们应用到其他数组对象?
transform = -> { reverse.map(&:upcase) }
我尝试了以下方法,但没有任何运气:
使用 JRuby 1.7.1
%w(a b c).send(transform)
TypeError: #<Proc:0x19a639d8@(irb):12 (lambda)> is not a string
还有
%w(a b c).send(&transform)
ArgumentError: wrong number of arguments (0 for 1)
使用 Ruby 1.9.3
%w(a b c).send(transform)
TypeError: #<Proc:0x007fa0721f0dc8@(irb):1 (lambda)> is not a symbol
和
%w(a b c).send(&transform)
ArgumentError: no method name given
【问题讨论】: