以下のルビコードを実行すると、配列がグローバルに操作されるのはなぜですか?そして、関数のスコープ内でのみ配列を操作できるようにするにはどうすればよいですか?Rubyで配列をローカル関数(関数内)でのみ操作できるようにするにはどうすればよいですか?
a = [[1,0],[1,1]]
def hasRowsWithOnlyOnes(array)
array.map { |row|
return true if row.keep_if{|i| i != 1 } == []
}
false;
end
puts a.to_s
puts hasRowsWithOnlyOnes(a)
puts a.to_s
$ ruby test.rb
出力:
[[1, 0], [1, 1]]
true
[[0], []]
私はそれを動作させることはできません。私も.select{true}
を試して、それを新しい名前に割り当てました。 Ruby for Arraysのスコープはどのように機能しますか? は参考のために、$ ruby -v
:
ruby 2.2.1p85 (2015-02-26 revision 49769) [x86_64-linux]
Rubyの新機能で、答えがあなたに何かを意味するかどうか分かりませんが、http://stackoverflow.com/questions/1872110/is-ruby-pass-byをご覧ください。あなたのコードが何をしているのかを理解するのに役立つかどうかを教えてください。 –
'keep_if'を' select'に変更して、必要に応じてコードを動作させますが、以下の@ WayneConradの勧告を使う方がはるかに優れています。 –