2016-06-30 12 views
1

説明:#Ruby Tk渡しメソッド/関数の引数として

引数としてメソッドや関数を渡す方法を知りたいと思います。例えば

Pythonのになります。私がしなければ、この例では

from MyFile import MyClass 

MyClass().my_method_click(function) # without parentheses 

、Pythonの にあなたは、 括弧なしで関数やメソッドを送信します。

from MyFile import MyClass 

MyClass().my_method_click(function()) # with parentheses 

私は関数を呼び出しますが、送信しません。 ルビー

あなたがメソッドまたは関数を呼び出すとき、あなたは括弧なしでまたは それを行うことができます。

私はRubyでこれを行う場合:

require_relative "MyClass" 

MyClass.new.my_method_click(function) # without parentheses 

ちょうどそれを送信することなく、それを呼び出します。

もちろん、ボタンをクリックすると、この操作が実行されます。

Rubyでどうすればいいですか?

ありがとうございました!

+0

あなたの質問は不明です。メソッドと関数については、あたかも相互に交換可能であるかのように話しますが、メソッドと関数は全く異なるものです。メソッドはオブジェクトに属しますが、それ自体はオブジェクトではありません。関数*は*オブジェクトです。 Rubyには「機能」という概念はありません。 *正確に何を意味するかに応じて、 "関数"の役割は、 'proc'、' call'に応答するオブジェクト、 'to_proc'に応答するオブジェクト、または' to_proc'オブジェクトに応答するオブジェクト'call' *と*' to_proc'に応答します。 –

答えて

0

基本的に、実行可能なコードブロックを渡したいとします。私はまだPythonを調べていませんが、クロージャもサポートしていると思います。

とにかく、Rubyでは、実行可能コードを渡す「一般的な」方法は、ブロック(lambdasとprocs)を使用することです。

function = lambda { # your code } 
MyClass.new.my_method_click(function) 

# or a shorter way 
MyClass.new.my_method_click(-> { # your code }) 

# to run a block 
def my_method_click(&block) 
    #you can either `yield` from your receiving method 
    yield 

    # or call `.call` method on your lambda/proc instance 
    block.call 
end 

また、あなたのクラスのメソッドのインスタンスを取得したり、Method.newを使用して新しいメソッドを作成することができます。しかし、結びつきや正しいインスタンス型へのバインドなどを扱うことになります。したがって、LambdaProcではより簡単です。

関連する問題