Mã này hoạt động như mong đợi (không có gì, thậm chí không tạo ra cảnh báo/lỗi):của Ruby luận lambda
l = lambda {|i|}
l.call(1)
Mã này tạo ra cảnh báo (cảnh báo: nhiều giá trị cho một tham số khối (0 trong 1)):
l = lambda {|i|}
l.call
Và mã này thất bại với lỗi (ArgumentError: sai số của đối số (0 2)):
l = lambda {|i, y|}
l.call
tôi thứ nên lambda đó đòi hỏi tất cả các đối số phải được thông qua.
Và từ ví dụ thứ hai, tôi thấy rằng nó không phải là. Tại sao nó hoạt động khi chỉ có một đối số được đưa ra, và hoạt động như mong đợi (thất bại với lỗi) với nhiều hơn một đối số?
PS: ruby 1.8.6 (2008/08/11 patchlevel 287) [universal-darwin9.0]
UPDATE: Tôi đã kiểm tra các mẫu với ruby 1.9.1p376. Và nó hoạt động như mong đợi - ví dụ thứ hai cũng tạo ra lỗi. Có vẻ như đây là một tính năng của phiên bản 1.8 (hoặc < = 1.8)
Xin lỗi, nhưng tôi không thể tìm thấy câu trả lời ở đó. Bạn có thể vui lòng chỉ? –
Đã thêm một con trỏ :) – Trevoke
Cảm ơn bạn!Nhưng dù sao, vẫn chưa rõ lý do tại sao hành vi đó tồn tại (chính xác - tồn tại) –