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.
Bardzo fajnie, że istnieje metoda 'respond_to?'. Sprawia, że tego typu rzeczy są o wiele łatwiejsze. – Automatico