def test
"Hello World"
end
p method(:test).call #"Hello World"
p method("test").call #"Hello World"
call
私の質問は、メソッドにシンボルを渡すとどうなるかということです。ルビーはシンボルを文字列に変換してから実行しますか?もしそうなら、それは何の目的ですか?
そうでない場合、実際に何が起こりますか?詳しく教えていただけますか?はっきりさせなかったらごめんなさい。
def test
"Hello World"
end
p method(:test).call #"Hello World"
p method("test").call #"Hello World"
call
私の質問は、メソッドにシンボルを渡すとどうなるかということです。ルビーはシンボルを文字列に変換してから実行しますか?もしそうなら、それは何の目的ですか?
そうでない場合、実際に何が起こりますか?詳しく教えていただけますか?はっきりさせなかったらごめんなさい。
def test ...
明示的なクラスまたはモジュール定義の外で実行すると、基本的に Object クラスのコンテキストにいるためtest
、インスタンス メソッドになります。Object
でirb
...
1.8.7 :001 > def test
1.8.7 :002?> "Hello world"
1.8.7 :003?> end
=> nil
1.8.7 :004 > Object.instance_methods.sort
=> ["==", "===", "=~", "__id__", "__send__", "class", "clone", "display", "dup", "enum_for", "eql?", "equal?", "extend", "freeze", "frozen?", "hash", "id", "inspect", "instance_eval", "instance_exec", "instance_of?", "instance_variable_defined?", "instance_variable_get", "instance_variable_set", "instance_variables", "is_a?", "kind_of?", "method", "methods", "nil?", "object_id", "private_methods", "protected_methods", "public_methods", "respond_to?", "send", "singleton_methods", "taint", "tainted?", "tap", "test", "to_a", "to_enum", "to_s", "type", "untaint"]
method
Object
基本的にすべてに継承されるクラスのインスタンス メソッドです。method
明示的なクラスまたはモジュール定義の外で呼び出す場合、本質的にクラスのメソッドとして呼び出すことになりObject
、そのクラス自体が (Class
のサブクラスであるのインスタンスであるObject
ことに注意してください。 )。
そのため、method
メソッドは文字列またはシンボルを受け取り、呼び出されたのと同じオブジェクトでその名前のバインドされたメソッドをカプセル化したオブジェクトを返します.method
。この場合、それはオブジェクトtest
にバインドされたメソッドです。Object
method(:test).call
は、を介して以前に定義したtest
メソッドを呼び出すことを意味します。Object
def test ...