引数

2017-01-16 9 views
-3

としてメソッド名を使用するためにどのように私はこの引数

def foo(method_name) 
    bars.find{|bar| bar.method_name } 
end 

引数method_nameような方法は、シンボルとブール値を返しますmethod_name方法である持っています。

&:を使用してこのメ​​ソッドを記述できますか? は、私は次のように書きたい:

bars.find("&:#{method_name}") 

しかし、それは動作しません。

+0

を試してみてください。 'bars.find {| bar | bar.method_name} 'は' bars.find(&:method_name) 'として書き直されるかもしれません。 – mudasobwa

+0

@mudasobwa:確かに 'bars.find(&method_name)'を意味しますか? –

+0

@SergioTulentsev確かに私はしなかった:) 'bars.find {| bar | bar.any? } '' bars.find(&:any?) ''あなたは 'method_name'の名前で混乱していました:) – mudasobwa

答えて

0

あなたは_have_方法はまだ動作しません

def foo(method_name) 
    method_sym = method_name.to_sym 
    bars.find(&method_sym) 
end 

# one line 
def foo(method_name) 
    bars.find(&method_name.to_sym) 
end 

または

def foo(method_name) 
    bars.find{|bar| bar.public_send(method_name)} 
end 
+1

これはどのように質問に答えていますか?また、 'public_send'の代わりに' send'を使うと、コードの匂いが出ます。 – mudasobwa

+0

'method_name'が文字列であると仮定しました。 –

+0

''#{method_name} "' '仮定の中で' 'method_name'は文字列です"は意味がありません。 – mudasobwa