HelloPhysicsWorld->vecmath-ruby->chapter5.1
ごめんなさい、前回のchapter5で、嘘ついていました><
http://d.hatena.ne.jp/paella/20070204/1170596857
http://d.hatena.ne.jp/paella/20070205/1170686957
rubyには値渡ししかなく引き数として与えられた変数の値を変えても元の式の値は変わりません.ただし,オブジェクトの参照が渡るので値に対して破壊的な操作は可能です.
ただし,オブジェクトの参照が渡るので値に対して破壊的な操作は可能だとのことです。ので、こう書けますね。
class Vector3 attr_accessor :x,:y,:z end class Matrix3 attr_accessor :m00,:m01,:m02 attr_accessor :m10,:m11,:m12 attr_accessor :m20,:m21,:m21 def initialize m00=0,m01=0,m02=0, m10=0,m11=0,m12=0, m20=0,m21=0,m22=0 @m00,@m01,@m02 = m00,m01,m02 @m10,@m11,@m12 = m10,m11,m12 @m20,@m21,@m22 = m20,m21,m22 end def get_row row,vec raise "" unless row < 3 case row when 0 vec.x = @m00 vec.y = @m01 vec.z = @m02 when 1 vec.x = @m10 vec.y = @m11 vec.z = @m12 when 2 vec.x = @m20 vec.y = @m21 vec.z = @m22 end print 'foo '; p vec vec = Vector3.new #仮引数は「オブジェクトの参照の値」のコピーなので #オブジェクトの参照自体に影響は無い print 'hoge'; p vec end end vec = Vector3.new mat = Matrix3.new(1,2,3,4,5,6,7,8,9) p vec #=>#<Vector3:0x287dd48> mat.get_row(0,vec) #=>foo #<Vector3:0x287dd48 @x=1, @z=3, @y=2> #=>hoge#<Vector3:0x287d924> p vec #=>#<Vector3:0x287dd48 @x=1, @z=3, @y=2> mat.get_row(1,vec) #=>foo #<Vector3:0x287dd48 @x=4, @z=6, @y=5> #=>hoge#<Vector3:0x287d85c> p vec #=>#<Vector3:0x287dd48 @x=4, @z=6, @y=5> mat.get_row(2,vec) #=>foo #<Vector3:0x287dd48 @x=7, @z=9, @y=8> #=>hoge#<Vector3:0x287d794> p vec #=>#<Vector3:0x287dd48 @x=7, @z=9, @y=8>
はい、大丈夫ですね^^