访问模块中包含的 ruby 方法的符号

Accessing ruby method's symbol contained in a module

给定 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

污染命名空间

您可以使用 method 方法获取可调用对象(即支持 #call 的对象,就像 proc 一样):

a = A.method(:a)
a.call # Or a[] or a.() as you prefer.
# "a"

A::a 是一种方法,所以你可以简单地做:

m = A.method :a
m.call # returns "a"

是的,您可以使用 send:

A.send :a  #=> "a" 

A.send "a" #=> "a"