Метод с необязательным параметром

Есть ли способ сделать метод, который может принимать параметр, но также может быть вызван без одного, и в этом случае параметр считается nil следующим образом:

some_func(variable)

some_func

Ответ 1

def some_func(variable = nil)
  ...
end

Ответ 2

Помимо более очевидной опции параметров со значениями по умолчанию, которые Sawa уже показал, использование массивов или хешей может быть удобно в некоторых случаях. Оба решения сохраняют nil как аргумент.

1. Получать как массив:

def some_func(*args)
  puts args.count
end

some_func("x", nil)
# 2

2. Отправить и получить как хэш:

def some_func(**args)
  puts args.count
end

some_func(a: "x", b: nil)
# 2

Ответ 3

Вы также можете использовать хэш в качестве аргумента и иметь больше свободы:

def print_arg(args = {})
  if args.has_key?(:age)
    puts args[:age]
  end
end

print_arg 
# => 
print_arg(age: 35, weight: 90)
# => 35