0

割り当ての一部として、桃の木のクラスを定義しました。60 年後にツリーを枯らす方法の 1 つに if ステートメントを含めることができるかどうか疑問に思っていました。これは私のコードです:

class Tree
  def initialize(color="green", fruit="peaches", age=0, peaches_amount=0)
    @color = color
    @fruit = fruit
    @age = age
  end

#age increases by one year every year
  def the_age
    @age += 1
    return @age
  end

#yield of peaches increases by 5 peaches every year
  def peaches
    @peaches_amount += 5
    return @peaches_amount
  end

  def death
    if age <60 return "I am dead"
    else 
    end
  end
end
4

2 に答える 2

0

試してみると:

tree = Tree.new
tree.peaches
  • エラーが発生しますundefined method '+' for nil:NilClass
  • を定義することはありません@peaches_amount
  • を定義することはありませんage

あなたの定義では、60 歳未満の場合は死んでいます。チェックを取り消さなければならないと思います。

peachesすでに死亡している場合もチェックインできます。

私の例を見てください:

class Tree
    def initialize(color="green", fruit="peaches", age=0, peaches_amount=0)
            @color = color
            @fruit = fruit
            @age = age
            @peaches_amount = peaches_amount
            @dead = false
    end
    #age increases by one year every year
    def the_age
           @age += 1
           if @age == 60 
             @dead = true
             puts "I died"
           end
          return @age
    end
    #yield of peaches increases by 5 peaches every year
    def peaches
      if @dead
        return 0 
      else
        return 5 * @age
       end
    end

    def dead?
      if @dead
        return "I am dead"
      else 
        return "I am living"
      end
    end
  end

tree = Tree.new
puts "%i Peaches after %i years" % [ tree.peaches, tree.age ]
30.times{ tree.the_age }
puts "%i Peaches after %i years" % [ tree.peaches, tree.age ]
30.times{ tree.the_age }
puts "%i Peaches after %i years" % [ tree.peaches, tree.age ]

出力:

0 Peaches after 0 years
150 Peaches after 30 years
I died
0 Peaches after 60 years

本当の答えを得るには、実装したいものを定義する必要があります。

于 2013-10-23T20:46:44.470 に答える
0

構文を確認してください。return "I am dead"条件と同じ行に配置しないでください。

if @age > 60
 "I am dead"
end

次のこともできます。

"I am dead" if @ge > 60

また、Ruby では明示的な戻り値は必要ありません。少なくともこの場合は、最後に評価されたステートメントの結果がメソッドの戻り値になるためです。

知っておくと便利なこと: を使用ruby -c my_script.rbして、構文エラーがあるかどうかを確認できます。または良いIDE。

これは Ruby 101 です。良い本を読むか、いくつかのチュートリアルに従うことをお勧めします。そこにはたくさんあります。

于 2013-10-23T20:32:37.370 に答える