Rubyを使ってみて気付いたことメモ
Redmine導入以降、Rubyを触るのもいいよねということで、取り合えずExcelの管理資料を読み込んでクネクネさせるべく、触っています。はい。
主にJava屋だった視点から…なのかな。気付いたことを幾つか。
- ファイル名は利用する側の"require"に影響する。
- requireの参照範囲(クラスパス的な)はどうやって決まってるんだろう?
- moduleとclassは名前空間として使える。"hoge = Module::Class::InnerClass.new"的な。
- moduleはmix-inでも使うらしいが、この辺はあとで試す。
- 既存のクラスにメソッドを追加する場合:
class Object def hoge puts "hoge" end end puts "a" hoge # => hoge
- いわゆるstatic methodは、クラスの特異メソッドとして定義される。
class Hoge def hoge puts "hoge" end def Hoge.hoge puts "Hoge.hoge" end end puts Hoge.hoge # => Hoge.hoge
- コンストラクタ的なやつはinitializeメソッドを定義する。
- 複数のコンストラクタが必要な場合、クラスメソッドで定義すべきなのかな。
- 実行ファイルとして想定してるやつは、ファイルの先頭に"#!"で文字コードを注記しておく:
puts "ソ" # => E:/rubyworks/test.rb:2: unterminated string meets end of file
#! ruby -Ks puts "ソ" # => ソ
- コマンドプロンプトで組み込みオブジェクトのドキュメントを参照する:
E:\>ri Array
- 多重代入:
class Hoge def hoge(foo, bar, fuga) @foo, @bar, @fuga = foo, bar, fuga end end
#! ruby -Ks puts /可/ =~ "hoge" # => nil puts /可/ =~ "不可" # => 2 puts /.可/ =~ "不可" # => 0 puts /..可/ =~ "不可" # => nil
- リストからの選択:
puts (1..10).select{|v| v >= 5} puts (1..10).find{|v| v >= 5}
- 作用が同じメソッドが結構ある。selectとfind_all、mapとcollectなど。宗教上の理由か。