tôi phát hiện ra từ hạch hỏi rằngLàm thế nào để foo (& nil) hoạt động khác với foo (& "không phải là một proc")?
[1, 2, 3].each(&nil)
không gây ra bất kỳ lỗi - nó chỉ trả về một điều tra viên.
Ngược lại,
[1, 2, 3].each(&"")
tăng
TypeError: wrong argument type String (expected Proc)
Ngoài ra, nguyên nhân &nil
block_given? để trả về false
def block_given_tester
if block_given?
puts "Block given"
else
puts "Block not given"
end
end
block_given_tester(&nil) # => Block not given
Nó không phải vì NilClass
thực hiện to_proc
- Tôi đã kiểm tra rdoc.
tôi có thể hiểu tại sao nó muốn được tốt đẹp để có &nil
, nhưng tôi không chắc chắn cách nó được thực hiện. Đây có phải chỉ là một trong những cách nil
có hành vi đặc biệt không được chia sẻ bởi các đối tượng khác không?
Tôi giả sử bạn đang xem một trong 1,8 chi nhánh không phải là một trong số 1.9 chi nhánh. –
Vâng, đó là từ Ruby 1.8, vì đó là mã tôi có sẵn. Bây giờ tôi đang tải mã cho Ruby 1.9.2 để xem có bất cứ điều gì đã thay đổi không. –
Tôi đã chỉnh sửa câu trả lời của mình cho Ruby 1.9.2. –