[#48382] Ruby/Gstreamer for Windows — ashbb <ashbbb@...>

こんにちは。

17 messages 2011/09/22
[#48383] Re: Ruby/Gstreamer for Windows — Kouhei Sutou <kou@...> 2011/09/23

須藤です。

[#48385] Re: Ruby/Gstreamer for Windows — ashbb <ashbbb@...> 2011/09/23

須藤さん

[#48392] 要素のない配列の挙動? — 俊(とし) <toshio.otaguro@...>

前略

21 messages 2011/09/24
[#48393] Re: 要素のない配列の挙動? — TADA Tadashi <t@...> 2011/09/24

ただただしです。

[#48394] Re: 要素のない配列の挙動? — 俊(とし) <toshio.otaguro@...> 2011/09/24

ただただし さん

[#48399] Re: 要素のない配列の挙動? — nonta@... 2011/09/24

野田と申します。

[#48400] Re: 要素のない配列の挙動? — 俊(とし) <toshio.otaguro@...> 2011/09/24

皆さま

[ruby-list:48411] Re: 要素のない配列の挙動?

From: 俊(とし) <toshio.otaguro@...>
Date: 2011-09-25 06:10:46 UTC
List: ruby-list #48411
にくさん,

あいにく,私は Marshal というものを全く知りませんが,言わんとされていることは
何となくわかるような気がします.

とにかく,配列の配列になると,最下位より上の配列要素は全てオブジェクトへの
参照になるので,一筋縄ではいかないように思います.
自分なりに試してみようと思い,以下のような実験をしてみました.

r = [[1, 2], [3], [4, 5]]
p r      #=> [[1, 2], [3], [4, 5]]
q1 = r.dup
q2 = r[0..-1]
q3 = r.collect{|x| x.dup}
q4 = r.collect{|x| x[0..-1]}
r.collect! do |x|
  x.collect! {|y| y += 1}
end
p r      #=> [[2, 3], [4], [5, 6]]
p q1    #=> [[2, 3], [4], [5, 6]]
p q2    #=> [[2, 3], [4], [5, 6]]
p q3    #=> [[1, 2], [3], [4, 5]]
p q4    #=> [[1, 2], [3], [4, 5]]

私は r[0..-1] に関しても,dup に関しても浅い理解してしていなかったようです.

-- 
俊(とし)


2011年9月25日14:11 -E:), niku <niku@niku.name>:
> にくといいます
>
> Marshal はどうでしょうか.
>
> inner1 = [1,2,3]
> inner2 = [4,5,6]
> outer  = [inner1, inner2]
> cloned = outer.clone
> dumped = Marshal.load(Marshal.dump(outer))
>
> outer  # => [[1, 2, 3], [4, 5, 6]]
> cloned # => [[1, 2, 3], [4, 5, 6]]
> dumped # => [[1, 2, 3], [4, 5, 6]]
>
> inner1[0] = "changed"
>
> inner1 # => ["changed", 2, 3]
> outer  # => [["changed", 2, 3], [4, 5, 6]]
> cloned # => [["changed", 2, 3], [4, 5, 6]]
> dumped # => [[1, 2, 3], [4, 5, 6]]
>
> るりま「値渡しと参照渡しの違いを理解する」の
> http://jp.rubyist.net/magazine/?0032-CallByValueAndCallByReference
> 「参照の値渡し」も参考になるかもしれません.
>
> 僕はあんまりこのあたりを覚えていなくて,使おうとすると混乱するので
> 個人的にはできるだけ配列への再代入を使わなくてもすむようにプログラミングしています.

In This Thread