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

标签 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 污染命名空间

最佳答案

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

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

关于ruby - 访问模块中包含的 ruby​​ 方法的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38493732/

相关文章:

c++ - 使用 MPL 列表扩展 boost 变体

ruby-on-rails - rails 服务器无法启动; getaddrinfo : nodename nor servname provided, 或未知 (SocketError)

ruby-on-rails - 对调用另一个生成器的 Rails 生成器进行单元测试

ruby - Ruby:您可以发送套接字作为参数吗?

c++ - 元编程,阶乘,C++,boost

python - 在 Python 描述符中创建动态文档字符串

ruby - Open3.popen3 在 Windows 上返回错误错误 Errno::ENOENT

ruby - Ruby Programming Language 书在 ruby​​ 2.2.2 中仍然有效吗?

ruby - 是否可以在 Rspec 中访问周围上下文的主题?

ruby-on-rails - 从 Rails 中的其他模型访问属性