我已经创建了一个Person类,我的代码是正确的,但我只是想让某人澄清一个特定的行。
class Person
attr_reader :first_name, :last_name, :age
def initialize (first_name, last_name, age)
@first_name = first_name
@last_name = last_name
@age = age
end
end
我感到困惑的是attr_reader
一行。为什么需要包含这个,为什么我需要在每个属性之前使用:
?
答案 0 :(得分:5)
attr_reader是一种方便的方法,ruby提供了以自动方式添加以下方法(getter方法)。即只需要一行代码就可以添加这三种方法。
至于将符号作为输入参数,这就是方法的定义方式。你可以在http://ruby-doc.org/core-1.8.7/Module.html#method-i-attr_reader
看一下def first_name
@first_name
end
def age
@age
end
def last_name
@last_name
end
答案 1 :(得分:1)
Ruby不允许公共访问实例变量,attr_reader
实际上是一个添加到类Class的方法,它提供了一种访问实例变量的简单方法。
class Class
def attr_reader(*args)
*args.each do |arg|
self.class_eval("def #{arg}; @#{arg}; end")
end
end
end
上面的 class_eval
只需在ur类定义中插入代码并对其进行评估;)