Ну, Я понимаю, что
- Цель Node - предоставить простой способ создания масштабируемых сетевых программ.
- Node похож по дизайну на такие системы, как Ruby's Event Machine или Python's Twisted.
- Evented I / O для V8 javascript.
Для меня это означает, что вы были правы во всех трех предположениях. Библиотека, безусловно, выглядит многообещающе!
Когда вы материализуете блок с помощью &, он становится объектом Proc, который имеет метод arity
. Только будьте осторожны - он возвращает дополнение до единицы, если процедура принимает аргумент * splat.
def foobar(x, y, z, &block)
p block.arity
end
(Ответ в книге "Язык программирования Ruby".)
Это то, что вы ищете ...
def foobar(x, y, z, &block)
# need to obtain number of arguments in block
# which would be 3 in this example
case block.arity
when 0
yield "i have nothing"
when 1
yield "I got ONE block arg"
when 2
yield "I got TWO block args"
when 3
yield "I got THREE block args"
end
end
foobar(1,2,3) { |a, b, c|
puts a
}
Выходы:
D:\ruby\bin>ruby -v
ruby 1.8.6 (2007-09-24 patchlevel 111) [i386-mswin32]
D:\ruby\bin>ruby c:\Temp.rb
I got THREE block args
См. Также - Ruby HOWTO: написание метода, использующего блоки кода из codahale.com