рубин в отличие, например, JavaScript или PHP навязывает количество аргументов, метод вызывается с:
def foo(a,b)
end
Итак, если вы звоните foo
без аргументов Рубин поднимет исключение ArgumentError: wrong number of arguments (0 for 2)
.
Устанавливая значение по умолчанию, вы отмечаете аргумент в качестве факультативных:
def foo(a = nil, b = nil)
end
Вызов foo
без аргументов больше не вызовет ошибку.
Это часто используются для создания методов, которые могут принимать аргументы списка или хэш:
def foo(a = nil, b = nil, opts = {})
opts.each do |k,v|
puts "#{k} : #{v}"
end
end
Как почему Рубин делает это - его решение дизайна языка. Он во многих случаях помогает отслеживать простые ошибки, когда вы просто передаете неправильные аргументы. На языке, который не обеспечивает этого, вы получите тип или неопределенную ошибку внутри метода, который сложнее определить основную причину. IMHO Matz получил это право.
Это означает, что он также принимает 'nil' за этот аргумент. – Pavan