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的解决方案,如果可能的话,最好避免.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...