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"
Tôi nghĩ từ khóa return
là tùy chọn trong Ruby và bạn luôn luôn là return
cho dù bạn có yêu cầu hay không. Do đó, tôi thấy điều ngạc nhiên là foo
và bar
có đầu ra khác nhau được xác định bởi thực tế là foo
chứa một số return
rõ ràng trong Proc f
.Tại sao lợi nhuận rõ ràng tạo sự khác biệt trong một Proc?
Có ai biết tại sao trường hợp này xảy ra không?
Đã chỉnh sửa cũng đề cập đến hành vi của lambdas – sepp2k
lưu ý, trong ví dụ của bạn nếu tiếp theo bị bỏ qua, hành vi vẫn còn. –
btw, tôi nghĩ cả hai chúng tôi đã làm một công việc tuyệt vời trả lời một câu hỏi khác nhau :) là tại sao, tôi nghĩ chỉ có Matz biết, rất nhiều thứ xung quanh việc đóng cửa vi phạm nguyên tắc ít ngạc nhiên nhất. –