Một khối là không lambda. Để xem nếu có một khối sử dụng block_given?
.
Trong mọi trường hợp, tôi sẽ sử dụng "trả lời cuộc gọi" nếu và chỉ khi Tôi thực sự cần cấu trúc này, mà tôi sẽ cố gắng tránh. (Xác định hợp đồng và làm cho gọi chịu trách nhiệm về cách gọi nó một cách chính xác!)
(lambda {1}).respond_to? :call # => true
(1).respond_to? :call # => false
Tôi tin rằng hình thức cấu trúc (hay còn gọi là vịt) gõ là inline hơn với Ruby hơn gõ được bổ nhiệm với "là một "mối quan hệ.
Để xem những gì "là một" mối quan hệ có thể giữ (đối với tương lai chơi trong một sandbox):
RUBY_VERSION # => 1.9.2
(lambda {}).class # => Proc
(Proc.new {}).class # => Proc
def x (&p); p; end # note this "lifts" the block to a Proc
(x {}).class # => Proc
Chúc mừng mã hóa.
Nguồn
2012-03-28 00:33:31
Rất hay khi có phương thức 'respond_to?'. Làm cho những thứ này dễ dàng hơn nhiều. – Automatico