2012-06-18 26 views
1

我創建了Person類,我的代碼是正確的,但我只是想讓某人澄清特定的行。在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

有一個優秀的答案在這裏找到: http://stackoverflow.com/questions/5046831/why -use-rubys-attr-accessor-attr-reader-and-attr-writer – sunnyrjuneja

+1

你不知道什麼:之前的字符串意味着什麼?閱讀有關符號http://www.ruby-doc.org/core-1.9.3/Symbol.html –

回答

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

紅寶石不允許實例變量的公共訪問,attr_reader實際上是一個方法添加到類類給出了一個簡單的方法來訪問實例varible。

class Class 
    def attr_reader(*args) 
     *args.each do |arg| 
      self.class_eval("def #{arg}; @#{arg}; end") 
     end 
    end 
end 

class_eval以上只是插入代碼在烏拉圭回合類的定義和評價他們;)

相關問題