访问模块中包含的 ruby 方法的符号
Posted
技术标签:
【中文标题】访问模块中包含的 ruby 方法的符号【英文标题】:Accessing ruby method's symbol contained in a module 【发布时间】:2016-11-24 10:14:01 【问题描述】:鉴于 Ruby 2.2
module A
def self.a
"a"
end
end
如何访问A.a
,以便分配给变量并稍后调用它?
我尝试了以下方法:
x = A::a.to_sym
send x # NoMethodError: undefined method `a' for main:Object
以下作品:
x = -> A.a
x.call
既然我在一个数组中有命名空间函数和非命名空间函数,有没有办法可以用send
做到这一点?
我真的不想用include A
污染命名空间
【问题讨论】:
但是你的意图是什么......为什么你需要这样做? 您上面的代码可以访问“a”,问题是您试图在 main 上调用 :a 并且该方法不存在 songyy,我有一个存在于不同命名空间中的函数列表,我想稍后执行。 【参考方案1】:您可以使用method
方法获得一个可调用对象(即支持#call
的对象,就像一个proc):
a = A.method(:a)
a.call # Or a[] or a.() as you prefer.
# "a"
【讨论】:
哎呀..同一时间..嗨:)【参考方案2】:A::a
是一个方法,所以你可以简单的做:
m = A.method :a
m.call # returns "a"
【讨论】:
【参考方案3】:是的,你可以使用send
:
A.send :a #=> "a"
或
A.send "a" #=> "a"
【讨论】:
以上是关于访问模块中包含的 ruby 方法的符号的主要内容,如果未能解决你的问题,请参考以下文章