2016-07-21 3 views
0

Учитывая рубин 2,2ACCESSING символ метода Ruby, содержащийся в модуле

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

+0

Но что ур намерение .. почему и нужно сделать? – songyy

+0

Ваш код выше работает для доступа к 'a', проблема заключается в том, что вы пытаетесь вызвать: a on main и этот метод там не существует – nikkypx

+0

songyy, у меня есть список функций, которые существуют в разных пространствах имен, которые я хочу для выполнения в более позднее время. – zhon

ответ

3

Вы можете получить вызываемый объект (то есть объект, который поддерживает #call так же, как процедурный), используя метод method:

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

Упс .. одновременно .. привет :) – songyy

2

A::a это метод, так что вы можете просто делать:

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

Да, вы можете использовать send:

A.send :a #=> "a" 

или

A.send "a" #=> "a" 
Смежные вопросы