, 당신은 g
이 call
방법을 제공해야합니다 것을 볼 수 있습니다. 당신이 그것을 참조하는 심볼 (:hello
)를 필요가 없습니다 여기
hello = lambda { |name| puts "Hello, #{name}" }
printv(hello) # prints: Hello, Fred and Hello, Amber
hello
람다를 저장하는 변수이다 : 기본적으로 call
방법을 제공 루비의 여러 클래스는 그들의 사이에 발동 및 람다가있다 .
이제 method
메서드를 살펴 보겠습니다. docs에 따르면, "명명 된 메소드를 obj의 수신자로 만들고, Method 객체를 반환하거나 NameError를 발생시킵니다." 그것의 서명은 "obj.method (sym) → method"입니다. 이것은 심볼 인수를 취하여 method object을 반환한다는 것을 의미합니다. 현재 method(:hello)
으로 전화하면 "hello"라는 메서드가 없기 때문에 문서에 언급 된 NameError
이 표시됩니다. 즉시 하나를 정의로, 가지가 있지만 작동합니다
def hello(name)
"Hello, #{name}"
end
method(:hello) #=> #<Method: Object#hello>
>> printv(method(:hello)) # works as expected
를 이것은 또한 당신이 다른 대답에 귀하의 코멘트에 언급 전화 printv(method("hello")
실패 이유를 설명 : method
시도를하는 방법 객체를 추출 할 수 있지만 경우가 실패 그 이름으로는 메소드가 없습니다. (인자는 인자로 쓰이기 때문에 문자열은 method
인턴의 경우 인자로 쓰입니다).
Michael! – Ava
다행히 도와 드리겠습니다 :-) –