【问题标题】:Can one include an if-statement in a method in ruby? [closed]可以在 ruby​​ 的方法中包含 if 语句吗? [关闭]
【发布时间】:2013-10-23 20:21:51
【问题描述】:

我已经为桃树定义了一个类作为作业的一部分。我想知道是否可以在我的一种方法中包含一个 if 语句,以使树在 60 年后死亡。这是我的代码:

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

【问题讨论】:

  • 当然可以。你的代码有什么问题?
  • 你还会把它放在哪里?
  • else 语句中应该包含什么内容?
  • 请注意,您的逻辑是倒退的,并且将规范地表示为 def death; return "I am dead" if age &gt; 60; end 或类似的。
  • 我们无法回答有关您的应用功能的问题,因为我们并未开发您的应用。就我个人而言,我会有一个 dead? 方法,如果年龄 > 60 则返回 true,否则返回 false。然后在需要检查一棵树是否死亡的地方使用该方法。

标签: ruby-on-rails ruby class if-statement methods


【解决方案1】:

如果你尝试:

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

为了给你一个真正的答案,你应该定义你想要实现的东西。

【讨论】:

    【解决方案2】:

    检查您的语法。不要将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,所以我建议你阅读一些好书或遵循一些教程,那里有很多。

    【讨论】:

      猜你喜欢
      • 2015-06-09
      • 2011-12-01
      • 2011-11-25
      • 1970-01-01
      • 2018-07-16
      • 2015-07-24
      • 2015-02-19
      • 2019-04-02
      • 2020-11-09
      相关资源
      最近更新 更多