0

最近 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

人が前述の特徴を持っている場合、年齢と性別をこのメソッドに渡すにはどうすればよいですか? よろしくお願いいたします。

4

3 に答える 3

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?- で終わるメソッドは?通常、ブール値を返します。
  • テキストの建物を method に移動しましto_sた。to_sでオブジェクトを印刷すると呼び出されますputs
  • メソッド内では避けたほうがよいでしょうputsputsほとんどの場合、メソッドを呼び出したときに応答文字列を返し、作成することをお勧めします。

おそらく私はあなたの要求を誤解しています。

is_father?Family のメソッドがなく、属性にアクセスする必要がある場合は、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)
于 2012-10-02T20:51:29.810 に答える
0

Using Struct can save a banch of code

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>
于 2012-10-02T21:20:26.280 に答える
0

age/sex/etc を初期化したら、@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

上記の例でメソッドに値を渡すと、初期化時に設定された値の代わりに使用されます

于 2012-10-02T21:08:17.817 に答える