Như one answer trong câu hỏi liên quan cho thấy:
Các return
từ khóa luôn lợi nhuận từ phương pháp hoặc lambda trong bối cảnh hiện nay. Trong các khối, nó sẽ trở về từ phương pháp trong đó đóng cửa là được xác định. Không thể thực hiện trả lại từ phương thức gọi hoặc lambda.
Ví dụ đầu tiên của bạn thành công vì bạn đã xác định victor
trong cùng chức năng bạn muốn trả lại, vì vậy, return
là hợp pháp trong ngữ cảnh đó. Trong ví dụ thứ hai của bạn, victor
được xác định ở cấp cao nhất. Hiệu ứng của số đó return
, sau đó, sẽ không phải là để trở về từ batman_yield
(phương thức gọi), nhưng [nếu nó hợp lệ] để trở về từ chính cấp cao nhất (trong đó Proc
được xác định).
Làm rõ: trong khi bạn có thể truy cập giá trị trả về của một khối (nghĩa là "Giá trị của biểu thức cuối cùng được đánh giá trong khối được chuyển trở lại phương thức làm giá trị của lợi nhuận" - theo nhận xét của bạn) , bạn không thể sử dụng từ khóa return
, vì lý do đã nêu ở trên. Ví dụ:
def batman_yield
value = yield
return value
"Iron man will win!"
end
victor = Proc.new { return "Batman will win!" }
victor2 = Proc.new { "Batman will win!" }
#batman_yield(&victor) === This code throws an error.
puts batman_yield(&victor2) # This code works fine.
có thể trùng lặp của [Sử dụng 'trả lại' trong khối Ruby] (http://stackoverflow.com/questions/2325471/using-return-in-a-ruby-block) – mgibsonbr
Tại đây: http: // stackoverflow. com/questions/1435743/why-does-explicit-return-make-a-sự khác biệt-in-a-proc – fmendez
Tôi biết bạn đang học điều này từ codeacademy. Tôi có những nghi ngờ tương tự. Đó là một hướng dẫn giới thiệu phong nha, nhưng bạn phải tìm kiếm google rất nhiều để có thể hiểu được hướng dẫn. –