【问题标题】:Pushing numbers onto an array in Ruby将数字推送到 Ruby 中的数组
【发布时间】:2014-09-07 19:05:42
【问题描述】:

我正在尝试创建一个程序来输出每个数字以及它是否可以被数字 2-9 整除。我通过迭代 2-9 并将每个数字推送到数组中来做到这一点,但是,编译时出现错误:

/Users/XXX/XXX/XXX/XXX.rb:3: warning: already initialized constant ArrayOfMultiples

如何消除此错误?

这是我的代码:

(1..200).each do |number|
    output_str = ""
    ArrayOfMultiples = Array.new

    (2..9).each do |multiple|
        if number%multiple == 0 
        ArrayOfMultiples.push(multiple)
        end
    end

    output_str = number.to_s + " is divisble by " + ArrayOfMultiples.join(", ")
    puts output_str     

end

【问题讨论】:

  • ArrayOfMultiples,因为它以大写字母开头,是一个常数。您可以更改常量的值,但 Ruby 会在您这样做时发出警告。您想将其重命名为变量并按如下方式对其进行初始化:array_of_multiples = []array_of_multiples = Array.newHere 是对 Ruby 命名约定的描述。

标签: ruby arrays iterator


【解决方案1】:

变量以小写开头,否则视为常量。如果你重新初始化一个常量,你会得到那个警告。

arrayOfMultiples

一个像下面这样的简单程序可以演示这种行为:

A = 1
A = 2

当你运行上面的脚本时,它会说:

test.rb:2: warning: already initialized constant A
test.rb:1: warning: previous definition of A was here

【讨论】:

  • 不要只用小写开始变量。 Ruby 中的变量是使用snake_case 编写的,而不是camelCase。 It's_a_readablity_thing NotJustAStylisticChoice。
【解决方案2】:

你也可以让它变得更简单:

(1..200).each do |x|
  divisible_by = (2..9).select {|y| x%y==0}
  puts "#{x}: #{divisible_by.join(", ")}"
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 2016-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 2021-08-16
    相关资源
    最近更新 更多