HelloPhysicsWorld->vecmath-ruby->chapter6
rubyのoverrideとoverloadとについて
rubyにjavaのvecmathライブラリを移植するときにoverloadの実装で困ったのでメモ。
最初にoverride。こっちは他の言語と同じ感じでいたって普通。
module Vec2 def initialize p :mod_vec2_before super p :mod_vec2_after end end module Vec3 include Vec2 def initialize p :mod_vec3_before super p :mod_vec3_after end end class Vector2 include Vec2 def initialize p :vec2_before super p :vec2_after end end class Vector3 < Vector2 include Vec3 def initialize p :vec3_before super p :vec3_after end end Vector2.new #=>:vec2_before #=>:mod_vec2_before #=>:mod_vec2_after #=>:vec2_after Vector3.new #=>:vec3_before #=>:mod_vec3_before #=>:vec2_before #=>:mod_vec2_before #=>:mod_vec2_after #=>:vec2_after #=>:mod_vec3_after #=>:vec3_after
superで、()を省略すると引数が全部渡されるくらい。
class Vector2 def initialize x,y p x,y super end end class Vector3 < Vector2 def initialize x,y,z p x,y,z super end end Vector3.new 1,2,3 #=>1 #=>2 #=>3 #=>C:/freetool/xyzzy/__temp_p06h.rb:11:in `initialize': wrong number of arguments (3 for 2) (ArgumentError) #=> from C:/freetool/xyzzy/__temp_p06h.rb:11:in `initialize' #=> from C:/freetool/xyzzy/__temp_p06h.rb:15:in `new' #=> from C:/freetool/xyzzy/__temp_p06h.rb:15
で、overloadについては長くなるので別で