2016-07-21 1 views
0

ルビー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

私は本当にあなたがmethod方法使用して呼び出し可能オブジェクト(ちょうどprocのよう#callをサポートしていますつまりオブジェクト)を取得することができますinclude A

+0

しかし、何ウル意思だ...なぜuがそれをする必要がありますか? – songyy

+0

上記のコードが 'a'にアクセスすると動作しますが、問題はあなたが呼び出しようとしていることです:メインとそのメソッドはそこに存在しません – nikkypx

+0

songyy、私は別の名前空間に存在する関数のリストを持っています後で実行することができます。 – zhon

答えて

3

で名前空間を汚染したくない:

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

おっと...同じ時間..こんにちは:) – songyy

2

A::aは方法ですので、あなたは、単純なdoができます。

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

はい、あなたはを使用することができます:

A.send :a #=> "a" 

または

A.send "a" #=> "a" 
関連する問題