Блок не лямбда. Чтобы увидеть, есть ли блок, используйте block_given?
.
В любом случае, я бы использовал «отвечает на вызов» тогда и только тогда, когда мне действительно нужна эта конструкция, которой я бы постарался избежать. (Определите контракт и возьмите на себя звонящего , ответственного за его правильное обращение!)
(lambda {1}).respond_to? :call # => true
(1).respond_to? :call # => false
Я полагаю, что эта форма структурной (иначе говоря, утка) печати более строчная с Ruby, чем именительная печать с отношениями "is a".
Чтобы посмотреть, какие отношения могут быть "есть" (для будущей игры в песочнице):
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
Удачного кодирования.