今日はRubyを始めてみた。まず、RubyForgeのサイトより、OneClickRubyInstallerを取得。
puts 1+2
と書いた、hello.rb という名前で保存し、Windowsのコマンドラインで
ruby hello.rb
とやると、
3
と表示された。逆引きRubyというサイトが参考となった。
- c++でのthisポインタにあたる概念はself のようだ。
- メンバ変数は、インスタンス変数と呼ばれ、
- メンバ関数(メソッド)は、インスタンスメソッドと呼ばれるようだ。
- static メソッドは、クラスメソッドと呼ばれ、<クラス名>.<メソッド名>のように宣言する。
- static メンバは、クラス変数と呼ばれるようだ。
- メソッドの定義は、def で始まり、end で終わる。
- 関数の引数はカンマで区切る。型名はとくに記述する必要もなく、受け取りたい変数名のみ記述すればよいようだ。
- クラス内での、インスタンス変数(メンバ変数)は@をつけて記述する。
- attr_accessor :変数名で、インスタンス変数の、参照と更新が可能となる。
●c++プログラマのためのRubyクラスの利用方法
クラスのインスタンスは、a=classA.new() などと書いて、いきなり作成できる。これでa という変数を作成したこととなり、新しく作成されたclassA のインスタンス
がa に入る。
●3次元ベクトルクラス
これを書きながら色々覚えた。
これの改良・拡張を通して、今後も学習を続けたい。
class Vec3
def initialize( x, y, z ) @x=x; @y=y; @z=z end
def ScalarPow() return x*x+y*y+z*z end
def Scalar() return Math::sqrt( self.ScalarPow() ) end
def Vec3.InnerProduct( a, b ) return a.x*b.x+a.y*b.y+a.z*b.z end
def Vec3.OuterProduct( a, b )
return Vec3.new(
a.y*b.z-a.z*b.y,
a.x*b.z-a.z*b.x,
a.x*b.y-a.y*b.x
)
end
def dump()
puts self.x, self.y, self.z
end
attr_accessor :x, :y, :z
endtako = Vec3.new(1,1,1)
takoX = Vec3.new( 1,0,0 )
takoY = Vec3.new( 0,1,0 )
puts tako.Scalar()
tako.dump()
takoZ = Vec3.OuterProduct( takoX, takoY )
takoZ.dump()