访问模块

时间:2016-07-21 02:10:41

标签: ruby metaprogramming ruby-2.2

鉴于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

来污染名称空间

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

A::a是一种方法,所以你可以这么做:

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

答案 2 :(得分:2)

是的,您可以使用send

A.send :a  #=> "a" 

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