今日はRubyを始めてみた。まず、RubyForgeのサイトより、OneClickRubyInstallerを取得。
puts 1+2
と書いた、hello.rb という名前で保存し、Windowsコマンドライン
ruby hello.rb
とやると、
3
と表示された。逆引きRubyというサイトが参考となった。


c++プログラマのための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
end

tako = 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()