Ruby- 블록을 다른 함수의 실제 블록으로 매개 변수로 전달할 수 있습니까?
-
20-09-2019 - |
문제
이것이 제가하려는 일입니다.
def call_block(in_class = "String", &block)
instance = eval("#{in_class}.new")
puts "instance class: #{instance.class}"
instance.instance_eval{ block.call }
end
# --- TEST EXAMPLE ---
# This outputs "class: String" every time
"sdlkfj".instance_eval { puts "class: #{self.class}" }
# This will only output "class: Object" every time
# I'm trying to get this to output "class: String" though
call_block("String") { puts "class: #{self.class}" }
"instance.instance_eval {block.call}"이라는 줄에서 새로운 인스턴스 변수 실행 인스턴스를 블록에서 평가할 수있는 다른 방법을 찾으려고합니다. 내가 그렇게 할 수있는 유일한 방법은 instance_eval을 변수 나 다른 것이 아니라 테스트 예제에서와 같이 실제 블록으로 전달하는 것입니다.
팁이 있습니까?
해결책
예. 블록 변수를 암페어와 같은 암페어로 선물하여 블록을 다른 방법으로 전달할 수 있습니다.
def foo &blk
# now, blk is a variable bound to a block object
bar &blk
end
"클래스 : 객체"를받는 이유는 루비가 어휘 스코핑을 사용하기 때문입니다. 이것은 그 자체를 의미합니다 puts "class: #{self.class}"
~을 참고하여 main
, 기본 컨텍스트.
제휴하지 않습니다 StackOverflow