-1
(100..999).each do |x| 
  (100..999).each do |y|

    z = x * y
    a = []

    if z.to_s.reverse == z.to_s
        a.push(z)
    end

    puts a

  end
end

このコードはおそらく絶対に恐ろしいものですが、値を配列に「固定」するのに問題があります。コードを実行するたびに、すべての数値が単一の値を持つ配列として返されますが、理由がわかりません。理由とこれを修正する方法の説明があればいいでしょう。何よりも学習演習です。

4

1 に答える 1

3

a = []次のように、ブロックの外側に配置する必要があります。

a = []

(100..999).each do |x| 
  (100..999).each do |y|

    z = x * y

    a.push(z) if z.to_s.reverse == z.to_s

  end
end

puts a

そうしないと、ループごとに新しい配列が作成されます。これを理解するには、スコープに関するドキュメントを調べる必要があります。a各スコープ内で変数を定義すると、そのスコープに対してローカルになるため、値が「固定」されない->永続化されます。

于 2013-03-12T18:18:47.240 に答える