1

我创建了一个 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。为什么需要包含这个,为什么我需要:每个属性之前的?

4

2 回答 2

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
于 2012-06-18T22:59:29.317 回答
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上面只是在你的类定义中插入代码并评估它们;)

于 2012-06-19T00:32:09.873 回答