【发布时间】:2012-03-06 20:13:24
【问题描述】:
我想在Object 上定义一个方法,该方法接受一个块并将接收器应用于该块。实现将如下所示:
class Object
def apply ≺ pr.call(self) end
end
2.apply{|x| x * 3} # => 6
是否已经有标准的方法来做到这一点,或者有一个众所周知的库有类似用途的方法?如果是这样,我不想重新发明轮子。
经常发生在我身上,我有一个方法接受一个可选块,当没有块时,我想返回一些在方法内计算的return_value,但是当有块时,我想要返回应用于块的return_value 的返回值。现在,我有很多行,例如:
def method ..., &pr
...
pr ? pr.call(return_value) : return_value
end
但我想始终如一地写
def method ..., &pr
...
pr ? return_value.apply(&pr) : return_value
end
甚至更好,对apply的定义稍作修改,
def method ..., &pr
...
return_value.apply(&pr)
end
【问题讨论】:
-
当上面列出的小函数实现了你的目标时,你为什么要引入一个新的依赖?
-
@maerics 如果有内置方式,我想使用它。
-
为什么不直接使用 lambda?
f = ->(x) { x * 3 }; six = f[2] -
@muistooshort 其实这样不好。
-
看起来你的积木可能放错了地方。为什么不直接返回值,让调用者用它做他们想做的事?
标签: ruby ruby-1.9.3 proc-object