配列にdupまたはdeep_dupでコピーしてもコピーした対象が変化してしまう現象を解決したい
Rubyで信号処理をしています.
その際に,あるクラス内に以下のようなコードの部分があります.
txs = @_transmits.dup # or deep_dup: require 'active_support'
rxs = @_receives.dup # or deep_dup
dist = makeNonlinearSignal(txs) # クラス内メソッド
この部分において,メソッドmakeNonlinearSignal
前後でtxs
の中身が変化してしまいます.
ちなみにmakeNonlinearSignal
メソッドの中身は以下です.
# PAの歪み信号とLNAの歪み信号を返す
def makeNonlinearSignal(signal)
distPA = channelTimeDomainConvolution(signal.map! {|a| a * a.abs2})
distLNA = channelTimeDomainConvolution(signal.map! {|a| a + @_paCoef * a * a.abs2}).map {|a| a * a.abs2}
return distPA, distLNA
end
Rubyは引数による変数の渡しはでき,受けができないはずなのですが,この原因がわかりません.
さらに,dup
(少し浅い)及びdeep_dup
(深い)でコピーしてもどちらもメソッド後に信号が変化してしまいます.
どのようにしたらtxs
は変化しないようにできますでしょうか.
ご教授お願いいたします.