【问题标题】:My "return" statement doesn't work我的“退货”声明不起作用
【发布时间】:2014-08-22 13:46:59
【问题描述】:

我有这个方法,它应该从常量数组​​中生成随机选择。但是该方法不会返回结果。事实上它不会返回我尝试的任何东西。

代码如下:

COLORS = ["B", "G", "R", "O", "Y", "P"]

class Computer
  attr_reader :random_code

  def initialize
    @random_code = secret_code
  end

  def secret_code

    sample_code = []

    sample_code << COLORS.sample(4)

    return sample_code

  end

  def add(a, b)
    return a + b
  end


end


c = Computer.new

c.add(5, 10)    

添加“add”方法只是为了测试它,但它也不起作用。当我说它不起作用时,我的意思是它在控制台中没有显示任何内容。

【问题讨论】:

  • 你需要告诉它打印结果:puts c.add(5,10)。此外,您根本不需要return。方法自动返回最后一个命令的结果。
  • 哦,谢谢你的帮助!

标签: ruby return


【解决方案1】:

正如@BroiSatse 指出的那样,问题在于您没有告诉 Ruby 将任何内容打印到控制台。

以下是我将如何修复和简化您的代码:

class Computer
  COLORS = ["B", "G", "R", "O", "Y", "P"]

  attr_reader :random_code

  def initialize
    @random_code = secret_code
  end

  def secret_code
    COLORS.sample(4)
  end

  def add(a, b)
    a + b
  end
end

c = Computer.new
puts c.add(5, 10)

还有一些值得注意的事情:

  1. 如果COLORS 是您的计算机类固有的东西,您可以将其拉入类并使其成为类常量。您可以在类中按原样引用COLORS,但请记住,如果您想在类定义之外的任何地方引用COLORS,则必须将其称为Computer::COLORS才能访问它.你现在的方式也很好,这只是一个小的代码组织。

  2. 您的 secret_code 函数可以简化为 COLORS.sample(4)。在 Ruby 中,您不必使用 return 关键字,并且在不需要时将其省略是惯用的。函数定义中的最后一个值是返回的值。另外,由于Array#sample已经返回了一个数组,所以不需要定义一个空数组[]并添加到它。

【讨论】:

  • 哇,非常感谢您的帮助!
  • secret_code 虽然我认为您的修改是更理想的结果,但我认为公平地说,OP 的方法将在 Array 内返回 Array,而您的方法是平坦的 @987654334 @通过#sample
  • 哎呀——非常真实!感谢您指出了这一点。如果你想要一个嵌套数组,你总是可以做类似[COLORS.sample(4)][] &lt;&lt; COLORS.sample(4) 的事情。
猜你喜欢
  • 2013-07-13
  • 2017-04-06
  • 2014-08-21
  • 2015-09-30
  • 2022-11-18
  • 2011-08-10
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
相关资源
最近更新 更多