我想知道:有没有办法在Ruby中调用一个方法而不使用它的名字?
如果该方法是由某些元编程技术创建的,那么通过其名称调用它可能很难阅读.即使对于通常定义的方法,如果您不确定它的名称,或者它的名称很长,通过某个关键字(类似于super)从内部调用它可能很方便.
KL-*_*L-7 11
您可以使用Kernel#__method__它返回当前方法的名称作为Symbol.不像super它不是关键字而是常规方法,所以你必须将它与send方法一起传递给方法以调用方法.
这是什么__method__回报:
obj = Object.new
def obj.foo
p __method__
end
obj.foo
# => :foo
Run Code Online (Sandbox Code Playgroud)
以下是动态定义阶乘方法的类方法示例:
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
Run Code Online (Sandbox Code Playgroud)
没有__method__我想不出任何不会涉及某种解决方案的解决方案,eval如果可能的话,最好避免.
| 归档时间: |
|
| 查看次数: |
602 次 |
| 最近记录: |