2011/07/25

2011/07/24

浮動小数点数にマッチする正規表現

$re_float = /[-+]?(?:[0-9]+(\.[0-9]*)?|(\.[0-9]+))([eE][-+]?[0-9]+)?/

p $re_float =~ "1.23"    # => 0
p $&.to_f                # => 1.23
p $re_float =~ ".23"     # => 0
p $&.to_f                # => 0.23
p $re_float =~ "1.23e1"  # => 0
p $&.to_f                # => 12.3
p $re_float =~ "1.23e-1" # => 0
p $&.to_f                # => 0.123
@ Rubyリファレンス

2011/07/11

privateメソッドを呼び出す

rubyではメソッドをprivateにするということは、可視性をなくすという意味ではない。__send__を使って呼び出したりもできるが、メソッドをテストするときにはこんな方法も使える。

2011/07/09

Rubyでクラスメソッドをprivateにする正しい方法

Rubyでクラスメソッドをprivateにする正しい方法
C++から来た人は( ゚д゚)ポカーンなんじゃないでしょうか。

2013/06/24 追記:
privateメソッドを呼ぶときにはselfは使えずに暗黙で呼ぶ(ここのリスト13)というのも結構( ゚д゚)ポカーン

2011/07/07

クラス変数は直感に反する(1.8)

Ruby1.8のクラス変数は継承されてしまうようです(1.9ではされないように変更)
一般的に(?)クラス変数という言葉から類推される挙動を求める場合は、クラスインスタンス変数を使います。「クラスのインスタンス変数」と「クラスインスタンス変数」は別物であることに注意。ややこしー。

逆にクラスインスタンス変数を使うと継承で初期化されないというデメリットがある。その場合は次のようにして初期化することができる。

class C
  @var = 1
  class << self
    attr_accessor :var

    def inherited(klass)
      klass.var ||= var
      super
    end
  end

  def disp
    self.class.var
  end
end

class D < C
end

p D.var # => 1
参考

2011/07/06

ruby1.8 / ruby1.9.1をdebianのupdate-alternativesツールで切り替える方法

ruby1.8 / ruby1.9.1をdebianのupdate-alternativesツールで切り替える方法
便利っすー。
どうしてgemは1.9だけ登録してるのかな?と思ったのですが、update-alternatives --display gemをして納得。gem1.8はupdate-alternativesで管理されているのに、gem1.9は管理されてないんですね。なんでなんでしょう...。

追記 2013/04/11:
今はrvm使ってます。

2011/07/05

chompの区切り文字として空文字列が指定された場合

p "abc\r\n\r\n".chomp("") # => "abc"

区切り文字として空文字列が指定された場合は、行末の連続する行区切り文字を全て削除する。多人数マルチOSでテキストファイルを編集した場合、改行コードが統一されない場合が多々発生するんですよねぇ…。ツカエル。

2011/07/03

多重代入のとき、右辺を全て評価し終わってから代入を行う

んー。temporaryを作らなくていいのが便利だなぁ。

var1, var2 = "value1", "value2"
var1, var2 = var2, var1
p var1 # => "value2"
p var2 # => "value1"