【发布时间】:2010-12-28 08:24:57
【问题描述】:
在 Ruby 中,一切都应该是一个对象。但是我有一个大问题要以通常的方式定义的函数对象,比如
def f
"foo"
end
与 Python 不同,f 是函数结果,而不是函数本身。所以f()、f、ObjectSpace.f都是"foo"。 f.methods 也只返回字符串方法列表。
如何访问函数对象本身?
【问题讨论】:
-
这是(许多)让我对红宝石发狂的事情之一。不调用函数就不能按名称引用它。我和我的奶牛工人对此有争论。
-
我认为 Ruby 有它自己的方式,其他语言中使用的一些原则根本不适用(在这种情况下,我可能会用 Proc 定义函数,或者使用代码块),但我仍然想知道我的问题是否有肯定的答案
-
@Jonathan:您可以引用方法的名称而不调用它。方法的名称是一个符号。所以这个方法的名字是
:f。 Ruby 以其元编程功能而闻名,并且一直使用方法名称。 -
@Chuck 符号根本没有与函数耦合,它们只是轻量级的字符串对象(它们只有一小部分方法),用于代替常量.只要您可以将符号作为方法名称传递,您也可以根据需要传递字符串。
-
@dvyjones:我没有说它们与方法耦合。我说它们可以用来指代方法的名称,以回应 Jonathan 的说法,即“您不能通过名称来引用方法”。事实上,一个方法的名称不可能与之耦合,因为许多方法可以共享同一个名称。