2016-06-30 4 views
1

설명 :#Ruby Tk 전달 메소드/함수를 인수로 사용합니다.

메소드 또는 함수를 인수로 전달할 수있는 방법을 알고 싶습니다. 예를 들어

, 파이썬에있을 것입니다 : 내가 할 경우이 예에서

from MyFile import MyClass 

MyClass().my_method_click(function) # without parentheses 

, 파이썬 당신이, 괄호없이 함수 또는 메소드를 보내

from MyFile import MyClass 

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

함수를 호출하지만 보내지 않습니다.

당신이 메서드 또는 함수를 호출 루비
, , 당신은 또는 괄호없이 그것을 할 수 있습니다.

나는 이것이 루비에서 할 경우 :

require_relative "MyClass" 

MyClass.new.my_method_click(function) # without parentheses 

그냥없이 호출을 보낼 수 있습니다.

물론 버튼을 클릭하면이 작업을 실행합니다.

루비에서 어떻게 할 수 있습니까 ??

고마워요!

+0

귀하의 질문에 명확하지 않습니다. 당신은 방법과 기능이 상호 교환 가능한 것처럼 이야기하지만, 방법과 기능은 매우 다른 것들입니다. 메소드는 객체에 속하지만 객체 자체는 아닙니다. 함수 *는 * 객체입니다. 루비는 "함수"라는 개념을 가지고 있지 않습니다. * 정확하게 * 당신이 의미하는 것에 따라, "함수"의 역할은'proc','call'에 응답하는 객체,'to_proc'에 응답하는 객체, 또는 객체 'call' * 및 *'to_proc'에 응답합니다. –

답변

0

기본적으로 실행 가능한 코드 블록을 전달하려고합니다. 필자는 아직 파이썬을 보지 못했지만 클로저를 지원한다고 확신합니다.

아무튼, 루비에서 실행 가능한 코드를 전달하는 "일반적인"방법은 블록 (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을 사용하는 것이 훨씬 쉽습니다.