나는 루비를 모른다. 지금은 일부 문서를 읽고있다. 코드 블록과 "yield"키워드를 사용하는 것에 대해 읽은 직후 의심스러운 점은 함수에 둘 이상의 코드 블록을 전달할 수 있는지 여부와 호출 된 함수 내에서 둘 다 사용할 수 있는지 여부입니다.Ruby에서 하나의 코드 블록을 함수에 전달하는 방법은 무엇입니까?
6
A
답변
9
한 번에 하나의 블록 만 전달할 수 있지만 블록은 실제로 Proc
인스턴스이며 매개 변수로 원하는만큼 인스턴스를 전달할 수 있습니다.
def mymethod(proc1, proc2, &block)
proc1.call
yield if block_given?
proc2.call
end
mymethod(Proc.new {}, Proc.new {}) do
# ...
end
그러나 거의 의미가 없습니다.
1
구문 상, yield
문을 사용하면 함수에 전달되는 코드 블록 하나만 지원됩니다.
물론 yield
을 사용하지 않고 다른 여러 함수 또는 "코드 블록 개체"(Proc
개체)의 함수를 전달하여 사용할 수 있습니다.
1
Proc
개체를 만들고 원하는만큼 많이 전달할 수 있습니다.
Ruby가 가지고있는 블록 및 클로저와 유사한 모든 구성의 미묘함을 이해하려면 this page을 읽기를 권장합니다.
1
당신은 전달 된 두 개의 블록을 처리하기 위해 수율보다는 call
방법을 사용할 수 있습니다
을 방법은 다음과 같습니다.
이def mood(state, happy, sad)
if (state== :happy)
happy.call
else
sad.call
end
end
mood(:happy, Proc.new {puts 'yay!'} , Proc.new {puts 'boo!'})
mood(:sad, Proc.new {puts 'yay!'} , Proc.new {puts 'boo!'})
당신은 예를 들어으로 인수를 전달할 수 있습니다
happy.call('very much')
논쟁은 블록처럼 예상대로 작동합니다.
Proc.new {|amount| puts "yay #{amount} !"}
관련 문제
- 1. Ruby에서 메소드에 블록을 전달하는 방법
- 2. Ruby에서 블록을 정의/이름 짓는 방법은 무엇입니까?
- 3. Ruby에서 여러 코드 블록을 인수로 전달
- 4. Ruby에서 블록을 요구하는 방법?
- 5. 알 수없는 유형을 함수에 전달하는 방법은 무엇입니까?
- 6. 벡터를 복사하여 참조로 함수에 전달하는 방법은 무엇입니까?
- 7. ajaxUpload 함수에 값을 전달하는 방법은 무엇입니까?
- 8. 변수를 대화 상자 함수에 전달하는 방법은 무엇입니까?
- 9. 함수에 "using"-type 객체를 전달하는 방법은 무엇입니까?
- 10. CreateProcess 함수에 문자열을 전달하는 방법은 무엇입니까?
- 11. JavaScript 함수에 변수를 전달하는 방법은 무엇입니까?
- 12. 플렉스에서 데이터를 처리 함수에 전달하는 방법은 무엇입니까?
- 13. 자바 스크립트 함수에 정수를 전달하는 방법은 무엇입니까?
- 14. 익명 함수에 객체 컨텍스트를 전달하는 방법은 무엇입니까?
- 15. 하나의 인수로 루비 블록을 단순화하는 방법은 무엇입니까?
- 16. 멤버 함수에 대한 포인터를 C 함수에 전달하는 방법은 무엇입니까?
- 17. Ruby에서 블록을 int로 블록에 닫는 이유는 무엇입니까?
- 18. 전체 코드 블록을 단계별로 실행하는 방법은 무엇입니까?
- 19. 프레젠테이션 내에서 코드 블록을 포맷하는 방법은 무엇입니까?
- 20. 블록을 사용하지 않고 Ruby에서 '맵'을 계산하는 방법은 무엇입니까?
- 21. Ruby에서 n * milli * 초 뒤에 코드 블록을 제한합니다.
- 22. 가장 좋은 방법은 파일을 함수에 전달하는 것입니다.
- 23. 익명 문자열 배열을 JavaScript 함수에 전달하는 방법은 무엇입니까?
- 24. jQuery를 사용하여 객체 참조를 함수에 전달하는 방법은 무엇입니까?
- 25. 모든 인수를 하나의 인수가 아닌 다른 함수에 컬렉션으로 전달하는 방법은 무엇입니까?
- 26. 함수에 대한 참조를 전달하는 가장 좋은 방법은 무엇입니까?
- 27. 요청 호출시 콜백 함수에 값을 전달하는 방법은 무엇입니까?
- 28. observe를 사용하여 함수가 할당되면 함수에 매개 변수를 전달하는 방법은 무엇입니까?
- 29. 텍스트 상자의 텍스트를 JavaScript 함수에 전달하는 방법은 무엇입니까?
- 30. 참조로 호출 할 때 함수에 매개 변수를 전달하는 방법은 무엇입니까?
블록은 정확히 procs가 아닙니다. 그것들은 일반적인 사용법과 문법을 가지고 있지만, 혼란스러운 행동을 야기하기에 충분한 구현의 차이점이 있습니다. 약간은 현학적인데, 그 범위를 정하는 차이는 전에 조금은 있습니다. – fengb
@fengb 방금 테스트를했습니다. http://gist.github.com/242746 Proc와 블록의 차이점에 대한 더 많은 문서가 있습니까? Ruby는 블록이 Proc임을 알려줍니다. –
블록은 & var 구문을 사용하여 proc에 암시 적으로 "유형 캐스팅"됩니다. 그러나 블록 대 프로 시저로 사용될 때 다르게 동작하는 특정 작업이 있습니다. 장황하지만 포괄적 인 비교 : http://innig.net/software/ruby/closures-in-ruby.rb – fengb