基础良好的Rubyist语法问题可选参数或散列参数
我目前正在阅读“基础扎实的红宝石第二版”,我在第296页,并得到了以下代码基础良好的Rubyist语法问题可选参数或散列参数,ruby,arguments,parameter-passing,Ruby,Arguments,Parameter Passing,我目前正在阅读“基础扎实的红宝石第二版”,我在第296页,并得到了以下代码 class Person attr_accessor :age def initialize(options) self.age = options[:age] end def teenager? (13..19) === age end end 选项[:年龄]指的是什么? 这是一个可选的论点还是什么? 如果我在写那个类,我会像@age=options 编辑-我忘了提到,我确实发
class Person
attr_accessor :age
def initialize(options)
self.age = options[:age]
end
def teenager?
(13..19) === age
end
end
选项[:年龄]
指的是什么?
这是一个可选的论点还是什么?
如果我在写那个类,我会像@age=options
编辑-我忘了提到,我确实发现了这个问题-使用了书中使用的行。但是我不明白为什么要用它,或者为什么
options
与符号[:age]
一起使用 options
不是可选参数,因为在没有该参数的情况下初始化Person对象会引发ArgumentError
错误,因为它需要一个参数,但您没有传递任何参数:
Person.new
# file.rb:4:in `initialize': wrong number of arguments (given 0, expected 1) (ArgumentError)
def initialize(options)
self.age = options
end
...
p Person.new(age: 100, another_thing: nil)
# #<Person:0x00007ff47e09aa18 @age={:age=>100, :another_thing=>nil}>
在这种情况下,选项
意味着是一个哈希或响应方法[]
的任何对象。因此,如果使用包含符号键age
的哈希初始化Person对象,则self.age
将取该值:
p Person.new(age: 100)
# <Person:0x00007ff05b84eab0 @age=100>
options
不是可选参数,因为在没有该参数的情况下初始化Person对象会引发ArgumentError
错误,因为它需要一个参数,但您没有传递任何参数:
Person.new
# file.rb:4:in `initialize': wrong number of arguments (given 0, expected 1) (ArgumentError)
def initialize(options)
self.age = options
end
...
p Person.new(age: 100, another_thing: nil)
# #<Person:0x00007ff47e09aa18 @age={:age=>100, :another_thing=>nil}>
在这种情况下,选项
意味着是一个哈希或响应方法[]
的任何对象。因此,如果使用包含符号键age
的哈希初始化Person对象,则self.age
将取该值:
p Person.new(age: 100)
# <Person:0x00007ff05b84eab0 @age=100>
啊,我明白了。这本书确实使用了
people=10.step(25,3).map{i | Person.new(age:i)}
来实例化多个人,你可以看到选项是一个散列,就像{age:i}
@Sebatian一样,选项散列是在什么时候创建的?散列是调用方法时使用的参数。当最后一个(或只有一个)参数是散列时,Ruby允许您省略{}
。所以Person.new({age:100})
和Person.new(age:100)
差不多。啊,我明白了。这本书确实使用了people=10.step(25,3).map{i | Person.new(age:i)}
来实例化多个人,你可以看到选项是一个散列,就像{age:i}
@Sebatian一样,选项散列是在什么时候创建的?散列是调用方法时使用的参数。当最后一个(或只有一个)参数是散列时,Ruby允许您省略{}
。因此Person.new({age:100})
与Person.new(age:100)
几乎相同。