有根据的Rubyist - 语法问题 - 可选参数或哈希参数



>我目前正在浏览"The Basis Rubyist 2nd Edition",我在第 296 页,并得到了以下代码

class Person
attr_accessor :age
def initialize(options)
self.age = options[:age]
end
def teenager?
(13..19) === age
end
end

options[:age]指的是什么? 这是一个可选的参数还是什么? 如果我在写那门课,我会像@age = options

编辑 - 我忘了提,我确实找到了这个问题 - Rails 可选参数 - 它使用书中使用的行。但是我无法弄清楚为什么使用它或为什么options与符号一起使用[:age].

options

不是可选参数,因为初始化没有该参数的 Person 对象会引发ArgumentError错误,因为它需要一个参数,但您没有传递任何参数:

Person.new
# file.rb:4:in `initialize': wrong number of arguments (given 0, expected 1) (ArgumentError)

在这种情况下,options意味着哈希或任何响应方法[]的对象。因此,如果使用包含符号键的哈希初始化 Person 对象age,则self.age将采用该值:

p Person.new(age: 100)
# <Person:0x00007ff05b84eab0 @age=100>

使用哈希作为参数在调用方法时提供了灵活性,因为您可以将任何需要的对象包装到哈希中,您只需要在方法定义中处理它们。

如果您执行self.age = options(或@age = options(,则您将分配self.age整个选项对象,该对象可以是整个哈希或作为参数传递的任何内容:

def initialize(options)
self.age = options
end
...
p Person.new(age: 100, another_thing: nil)
# #<Person:0x00007ff47e09aa18 @age={:age=>100, :another_thing=>nil}>

最新更新