Rubyメモ
クラス
最終更新:
匿名ユーザー
-
view
クラスの定義
class クラス名 < 親クラス .... end
クラス名は半角英大文字で始まる名前にする必要あり。
(実はRuby的にはクラス名=定数らしい。)
(実はRuby的にはクラス名=定数らしい。)
コンストラクタ
initializeという名前のメソッドで定義
class Point def initalize(x,y) @x = x @y = y end end
デストラクタは無い。#まあガベコレしてくれるんで要らないだろうな。
webで検索すると以下のようなやり取りが。
webで検索すると以下のようなやり取りが。
|2. C++ のデストラクタのようなものは Ruby ではどのように書くのでしょうか。 | C での拡張モジュール中では、Data_Make_Struct() の第4引数で関数を指定 | できるようですが、Ruby で作成したクラスの場合、どのように書くのか | わかりませんでした。 RubyレベルではGCがあるので,明示的にオブジェクトを破棄する必 要はあまりないはずです.どーしても,GCのタイミングでなんらか の処理が行いたい場合には lib/final.rb を使うワザはありますけ どね.実例としては lib/tempfile.rb を参照して下さい.でも, 分かるかなあ.必要でしたら更に解説します.
メンバ変数
インスタンス変数には@で始める。
@value1
クラス変数は@@で始める。
@@value2
@value1
クラス変数は@@で始める。
@@value2
アクセッサメソッド
JavaでsetFoo(),getFoo()というメソッドを使ってメンバ変数fooにアクセスするようにするけど、Rubyはattr_accesstor(set/get),attr_reader(get),attr_writer(set)を使って実現できる。
class Point def initalize(x,y) @x = x @y = y end attr_accessor :x attr_accessor :y end p1 = Point.new(1,1) puts p1.x
:とxの間にスペースを入れると構文エラーになる。これ以外にもなぜだかRubyはスペースの入れ方にうるさい箇所が多い。
クラスメソッド
クラス名.メソッド名になる
class Rectangle .... #四角形の角の数を返す def Rectangle.getApexCount return 4; end end
インスタンス生成
Javaだと new クラス名()だけど、Rubyはクラス名.new()で生成する。
a1 = Point.new