Получение количества параметров блока

Ну, Я понимаю, что

  • Цель Node - предоставить простой способ создания масштабируемых сетевых программ.
  • Node похож по дизайну на такие системы, как Ruby's Event Machine или Python's Twisted.
  • Evented I / O для V8 javascript.

Для меня это означает, что вы были правы во всех трех предположениях. Библиотека, безусловно, выглядит многообещающе!

10
задан Mohsen Nosratinia 8 May 2015 в 14:11
поделиться

2 ответа

Когда вы материализуете блок с помощью &, он становится объектом Proc, который имеет метод arity . Только будьте осторожны - он возвращает дополнение до единицы, если процедура принимает аргумент * splat.

def foobar(x, y, z, &block)
  p block.arity
end

(Ответ в книге "Язык программирования Ruby".)

31
ответ дан 3 December 2019 в 13:56
поделиться

Это то, что вы ищете ...

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

8
ответ дан 3 December 2019 в 13:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: