Tôi đang sử dụng ruby 1.8.7.khối ruby và trả lại thứ gì đó từ khối
p = lambda { return 10;}
def lab(block)
puts 'before'
puts block.call
puts 'after'
end
lab p
Trên đầu ra đang
before
10
after
tôi refactored cùng mã vào đây
def lab(&block)
puts 'before'
puts block.call
puts 'after'
end
lab { return 10; }
Bây giờ tôi nhận được LocalJumpError: trở lại bất ngờ.
Đối với tôi, cả hai mã đều hoạt động tương tự. Có trong trường hợp đầu tiên tôi đi qua một proc và trong trường hợp thứ hai tôi đang đi qua một khối. Nhưng khối & chuyển đổi khối đó thành proc. Vì vậy, proc.call sẽ hành xử giống nhau.
Và vâng tôi đã thấy bài này Using 'return' in a Ruby block
http://www.robertsosinski.com/2008/12/21/understanding-ruby-blocks-procs-and-lambdas/ là một cách viết rất hay. Cảm ơn bạn chia sẻ. –