def foo
f = Proc.new { return "return from foo from inside proc" }
f.call # control leaves foo here
return "return from foo"
end
def bar
b = Proc.new { "return from bar from inside proc" }
b.call # control leaves bar here
return "return from bar"
end
puts foo # prints "return from foo from inside proc"
puts bar # prints "return from bar"
나는 return
키워드가 Ruby에서 선택 사항이며 사용자가 요청했는지 여부와 상관없이 언제나 return
입니다. 그렇다면 foo
과 bar
은 foo
에 Proc f
에 명시적인 return
이 포함되어 있다는 사실에 따라 출력이 달라지기 때문에 놀랍습니다.명시 적 리턴이 Proc에서 차이를 만드는 이유는 무엇입니까?
왜 이런 경우인지 알고 계십니까?
lambda의 동작을 언급하기 위해 편집 됨. – sepp2k
note 다음 예가 생략 된 경우 예에서 동작이 유지됩니다. –
btw, 나는 우리 모두가 다른 질문에 답하는 훌륭한 일을했다고 생각한다. 이유에 관해서, 나는 Matz만이 알고 있다고 생각한다. 클로저 주변의 많은 것들은 최소한의 놀라움의 원칙을 위반한다. –