문제
s = Proc.new {|x|x*2}
puts s.call(5)
-> 10
def foo(&a)
a.call(5)
end
puts "test foo:"
foo(s)
위의 Proc를 호출하려고하면 다음과 같습니다.
foo: wrong number of arguments (1 for 0) (ArgumentError)
내 기대는 메소드 가이 유형의 서명으로 정의 된 경우 방법으로 Proc를 전달할 수 있다는 것이 었습니다.
def foo(&a)
그런 다음 다음과 같이 Proc Insiide Foo를 실행할 수 있습니다.
a.call(5)
해결책
실제 Proc를 Foo에게 전달하려면 def foo(a)
. put &
앞에 a
"이것은 실제로 논쟁이 아닙니다. 대신 차단하다 이 방법으로 전달하고, Proc를 만들고, 그 Proc를 변수 a "에 저장하십시오. 즉, 현재 정의와 함께 Foo를 다음과 같이 호출 할 수 있습니다.
foo do |x|
puts x*2
end
당신은 또한 사용할 수 있습니다 &
Proc를 블록으로 바꾸는 메소드를 호출 할 때 :
foo(&s)
제휴하지 않습니다 StackOverflow