2012-10-02 18 views
0

最近開始學習ruby,我創建了一個包含姓名,年齡,性別,婚姻狀況和特徵的家庭成員班。我試圖寫一種方法來確定一個家庭成員是否是家長,以及是否是其母親或父親。ruby​​中的類

所以該方法的代碼如下:

def is_father?(age, sex) 
    if age > 30 
     puts "is parent" 
      if sex == "Male" 
      then puts "is father" 
      else puts "not father" 
      end 
    end 
    end 

而且一個家庭成員可能是這樣的:

fm1=Family.new("John", "Male", 54, "Married", "Annoying") 

被初始化這樣後:

class Family 
    def initialize(name, sex, age, status, trait) 
    @fam_name=name 
    @fam_sex=sex 
    @fam_age=age 
    @fam_stat=status 
    @fam_trait=trait 
    end 
end 

如果一個人包含了前面提到的特徵,我該如何將年齡+性別傳遞給這個會面HOD?在此先感謝您的幫助

+0

一些性教育一個banch可能會被要求在這裏。 :) – steenslag

回答

1

您必須在初始化時將數據存儲在屬性中。稍後您可以在不使用方法參數的情況下使用它們。

例子:

class Family 
    def initialize(name, sex, age, status, trait) 
    @fam_name=name 
    @fam_sex=sex 
    @fam_age=age 
    @fam_stat=status 
    @fam_trait=trait 
    end 
    def is_parent?; @fam_age > 30;end 
    def is_father? 
    is_parent? and @fam_sex == "Male" 
    end 
    def to_s 
    result = @fam_name.dup 
    if @fam_age > 30 
     result << " is parent and is " 
      if @fam_sex == "Male" 
      result << "father" 
      else 
      result << "not father" 
      end 
     end 
    result 
    end 
end 

fm1=Family.new("John", "Male", 54, "Married", "Annoying") 
puts fm1.ilding is_parent? 
puts fm1.is_father? 
puts fm1 

備註:

  • 我修改你的is_father? - 方法上?結束通常會返回一個布爾值。
  • 我將您的文本建築移至方法to_s。如果您使用puts打印對象,則會調用to_s
  • 在您的方法中,您最好避免使用puts。大多數時候,最好是返回一個答案字符串,並在調用該方法時製作puts

也許我誤解你的要求。

如果is_father?是沒有家人的方法,你需要訪問屬性,那麼你必須定義一個getter方法:

class Family 
    def initialize(name, sex, age, status, trait) 
    @fam_name=name 
    @fam_sex=sex 
    @fam_age=age 
    @fam_stat=status 
    @fam_trait=trait 
    end 
    attr_reader :fam_sex 
    attr_reader :fam_age 
end 

fm1=Family.new("John", "Male", 54, "Married", "Annoying") 
puts fm1.fam_sex 
puts fm1.fam_age 


is_father?(fm1.fam_age, fm1.fam_sex) 
+0

非常感謝您的幫助,我很快就能完成工作! – shanahobo86

0

一旦你初始化年齡/性別/等你可以在任何方法,通過使用它們@age/@sex/@etc

def is_father?(age = nil, sex = nil) 
    if (age || @age) > 30 
     puts "is parent" 
    end 
    if (sex || @sex) == "Male" 
     puts "is father" 
    else 
     puts "not father" 
    end 
end 

在例如,如果你將值傳遞給上述方法,它們將被用來代替那些設定爲初始化

0

使用結構可以節省代碼

class Family < Struct.new(:name, :sex, :age, :status, :trait) 
    # define methods in usual manner 
end 

f = Family.new("John", 'male') #<struct Family name="John", sex="male", age=nil, status=nil, trait=nil>