Ruby:有一个关键字可以从内部调用一个方法(类似于super)吗?
发布时间:2020-12-16 23:14:52 所属栏目:百科 来源:网络整理
导读:我想知道:有没有办法在 Ruby中调用一个方法而不使用它的名字? 如果该方法是由某些元编程技术创建的,那么通过其名称调用它可能很难阅读.即使对于通常定义的方法,如果您不确定它的名称,或者它的名称很长,通过某个关键字(类似于super)从内部调用它可能很方便.
我想知道:有没有办法在
Ruby中调用一个方法而不使用它的名字?
如果该方法是由某些元编程技术创建的,那么通过其名称调用它可能很难阅读.即使对于通常定义的方法,如果您不确定它的名称,或者它的名称很长,通过某个关键字(类似于super)从内部调用它可能很方便. 解决方法
您可以使用
Kernel#__method__ 将当前方法的名称作为符号返回.与super不同,它不是关键字,而是常规方法,因此您必须将其传递给send方法以及必需的参数才能调用该方法.
这是__method__返回的内容: obj = Object.new def obj.foo p __method__ end obj.foo # => :foo 以下是动态定义阶乘方法的类方法示例: class Foo def self.define_fact(method_name) define_method(method_name) do |n| n > 0 ? n * send(__method__,n - 1) : 1 end end end f = Foo.new # puts f.fact(5) # => undefined method `fact' for #<Foo:0x8ede45c> (NoMethodError) Foo.define_fact :fact puts f.fact(5) # => 120 没有__method__,我想不出任何不会涉及某种eval的解决方案,如果可能的话,最好避免. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |