В Ruby 1.8.x вы можете подделать его так:
def creator
lambda do |*args|
raise ArgumentError if args.empty? || args.size > 2
arg1, arg2 = args
puts arg1
puts arg2 unless arg2.nil?
end
end
>> test = creator
=> #<Proc:0x000000010125e138@(irb):2>
>> test.call("foo")
foo
=> nil
>> test.call("foo", "bar")
foo
bar
=> nil
>> test.call("foo", "bar", "baz")
ArgumentError: ArgumentError
Редактировать: В приведенном выше примере по умолчанию второй аргумент равен nil
, но если вы хотите иметь другое значение по умолчанию, вы можете назначить arg2
на основе args.size
(например, arg2 = mydefault if args.size < 2
). Точно так же, если у вас есть более двух аргументов, по умолчанию неуказанные аргументы будут равны nil
, если вы не назначите их самостоятельно.
Для Ruby 1.9+ см. Другие ответы.