Ruby- 블록을 다른 함수의 실제 블록으로 매개 변수로 전달할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/2468446

  •  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, 기본 컨텍스트.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top