2012-03-28 25 views

Trả lời

35

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.

+0

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

Các vấn đề liên quan