2016-07-21 5 views
0

Rubin 2.2Zugreifen Symbol der Ruby-Methode in einem Modul

module A 
    def self.a 
    "a" 
    end 
end 
Gegeben enthalten

Wie greife ich A.a so kann ich einer Variablen zuweisen und sie später anrufen?

Ich habe versucht, die folgenden:

x = A::a.to_sym 
send x   # NoMethodError: undefined method `a' for main:Object 

folgende Arbeiten:

x = -> { A.a } 
x.call 

Da ich beide Namespace-Funktionen und nicht Namespace-Funktionen in einem Array haben, ist es eine Möglichkeit, dies zu tun mit send?

ich wirklich nicht will, mit dem Namensraum verschmutzen include A

+0

Aber was ist ur Absicht .. warum tun müssen, u, das zu tun? – songyy

+0

Ihr Code oben funktioniert, um auf 'a' zuzugreifen, das Problem ist, Sie versuchen zu nennen: ein on main und diese Methode gibt es nicht – nikkypx

+0

songyy, ich habe eine Liste von Funktionen, die in verschiedenen Namespaces, die ich will zu einem späteren Zeitpunkt ausführen. – zhon

Antwort

3

Sie können ein aufrufbare Objekt erhalten (dh ein Objekt, das #call wie ein proc unterstützt) mit der method Methode:

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

Ups .. gleiche Zeit .. hallo :) – songyy

2

A::a ist eine Methode, so können Sie einfach do:

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

Ja, können Sieverwenden:

A.send :a #=> "a" 

oder

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