在Ruby中创建Person类

时间:2012-06-18 22:54:21

标签: ruby

我已经创建了一个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一行。为什么需要包含这个,为什么我需要在每个属性之前使用:

2 个答案:

答案 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类定义中插入代码并对其进行评估;)