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など。宗教上の理由か。