我有课
class Person
attr_accessor :name,:age
def initialize(name,age)
@name = name
@age = age
end
end
我想将年龄设置为可选的,如果未通过,则年龄为0;如果未通过,则名称为空
我对它进行了一些研究,但对于我所发现的(必须在另一个变量{}中传递变量)来说,这有点令人困惑.
我有课
class Person
attr_accessor :name,:age
def initialize(name,age)
@name = name
@age = age
end
end
我想将年龄设置为可选的,如果未通过,则年龄为0;如果未通过,则名称为空
我对它进行了一些研究,但对于我所发现的(必须在另一个变量{}中传递变量)来说,这有点令人困惑.
就这么简单:
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')
然而,如果你只想超过年龄,这个调用看起来会很难看,因为你必须为name提供空白字符串:
Person.new('', 20)
为了避免这种情况,Ruby world中有一种惯用的方法: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
.
It seems表示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)