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

问题描述 投票:1回答:3

鉴于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污染命名空间

ruby metaprogramming ruby-2.2
3个回答
4
投票

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

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"

2
投票

是的,你可以使用send

A.send :a  #=> "a" 

要么

A.send "a" #=> "a" 
© www.soinside.com 2019 - 2024. All rights reserved.