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メソッド)。つまり、1行のコードで、これら3つのメソッドが追加されます。

入力引数としてシンボルを取ることに関しては、それがメソッドの定義方法です。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上記では、コードをurクラス定義に挿入して評価します;)

于 2012-06-19T00:32:09.873 に答える