2012-03-28 13 views

Odpowiedz

35

blok jest nie lambda. Aby sprawdzić, czy jest blok, użyj block_given?.

W każdym przypadku użyłbym "odpowiada na wezwanie" wtedy i tylko wtedy, gdy naprawdę potrzebowałem tej konstrukcji, której starałem się unikać. (Zdefiniuj umowę i dokonać rozmówcę odpowiedzialnego za wywoływanie go poprawnie!)

(lambda {1}).respond_to? :call # => true 
(1).respond_to? :call   # => false 

Uważam tę formę strukturalnego (aka kaczka) wpisując jest bardziej inline z Ruby niż mianowniku typowania z „jest "relacje.

Aby zobaczyć, co „jest” relacje mogą posiadać (w przyszłości grania w piaskownicy):

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 

Szczęśliwy kodowania.

+0

Bardzo fajnie, że istnieje metoda 'respond_to?'. Sprawia, że ​​tego typu rzeczy są o wiele łatwiejsze. – Automatico

Powiązane problemy