Это так просто:
class Person
attr_accessor :name, :age
def initialize(name = '', age = 0)
self.name = name
self.age = age
end
end
Person.new('Ivan', 20)
Person.new('Ivan')
Однако, если вы хотите передать только возраст, вызов будет выглядеть довольно уродливо, потому что вы все равно должны указать пустую строку для имени:
Person.new('', 20)
Чтобы избежать этого, в мире Ruby есть идиоматический способ: options параметр.
class Person
attr_accessor :name, :age
def initialize(options = {})
self.name = options[:name] || ''
self.age = options[:age] || 0
end
end
Person.new(name: 'Ivan', age: 20)
Person.new(age: 20)
Person.new(name: 'Ivan')
Сначала вы можете поместить некоторые обязательные параметры и поместить все дополнительные вoptions
.
Редактировать
Кажется , что Ruby 2.0 будет поддерживать реальные именованные аргументы.
def example(foo: 0, bar: 1, grill: "pork chops")
puts "foo is #{foo}, bar is #{bar}, and grill is #{grill}"
end
# Note that -foo is omitted and -grill precedes -bar
example(grill: "lamb kebab", bar: 3.14)