문제

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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top