にこのコードを変更しません:それは回転しなかった理由Rubyのブロックは、ここでは、ローカル変数
def create_sym_matrix
ran_arr = Array.new(5){rand(1..100)}
ran_arr[1] = 0
mat_arr = Array.new(5){|i|ran_arr.push(ran_arr.shift)}
Matrix.columns(mat_arr)
end
aa = create_sym_matrix
=> Matrix[[86, 86, 86, 86, 86], [0, 0, 0, 0, 0], [20, 20, 20, 20, 20],
[39, 39, 39, 39, 39], [48, 48, 48, 48, 48]]
誰かが私に説明できますか?私は対角線上にゼロを持つ対称マトリックスを得ようとしていました。
はどうもありがとうございました!ブロックが同じ値を繰り返し返す理由を説明できますか? – gavvel
Rubyオブジェクトは参照によってコピーされます。これは、 'a = ran_arr'は' ran_arr'の値を複製しないことを意味し、新しい名前を作成するだけです。 – axiac
ブロックは実行するたびに 'ran_arr'を変更します。 5回の回転の後、 'ran_arr'の値は' ran_arr'が作成された時と同じ順序で残されます。 – axiac