访问模块中包含的 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​​ 方法的符号的主要内容,如果未能解决你的问题,请参考以下文章

如何评估访问查询中另一个字段中包含的字段名称?

从类中包含的结构访问变量

如何设置 QMenu 中包含的 QActions 的可访问名称

从单独的文件中包含一个 Ruby 类

在代码中访问.webtestResult文件中包含的信息

如何访问 SpriteKit 场景编辑器参考节点上自定义类中包含的 Swift 中的变量?