などのレシーバへの送信方法:んメッセージを送信するときに、なぜ:を追加する必要がありますか?
method_name = :"#{some_method}"
send(method_name) if respond_to?(method_name, true)
:それは一種の象徴であることを意味ですか?
などのレシーバへの送信方法:んメッセージを送信するときに、なぜ:を追加する必要がありますか?
method_name = :"#{some_method}"
send(method_name) if respond_to?(method_name, true)
:それは一種の象徴であることを意味ですか?
これについてドキュメントをチェックアウトすることができます。 http://www.ruby-doc.org/core/classes/Object.html#M001005
はい、シンボルが必要です。これは、目で見た方が簡単に電話することもできます。 Rubyで
send(method_name) if respond_to?(some_method.to_sym, true)
シンボルは、任意の文字列値を含むことができるが、xxx
が有効な識別子でなければ、リテラル:xxx
表記を使用して表すことができません。 「:有効な識別子でないか、シンボルを作成するために、文字列の補間を使用したい場合、あなたは表記:"yyy"
とRubyもそのように報告し、それらを指定する記号について:
irb(main):001:0> "foo".to_sym
=> :foo
irb(main):002:0> :foo
=> :foo
irb(main):003:0> "foo-bar".to_sym
=> :"foo-bar"
irb(main):004:0> :"foo-bar"
=> :"foo-bar"
あなたは上記の持っている何か、 #{some_method} "は、some_method.to_s.to_sym
と同じです。
しかし、他の投稿への私のコメントで指摘したように、必要ならば、シンボルの代わりに文字列を直接send
に渡すことができます。
実際には、シンボルは必要ありません(1.8.6、1.8.7、1.9.1、および1.9.2でテスト済み): '[] .send( 'length')#=> 0' – Phrogz