トップ «前の日記(2009-09-26) 最新 次の日記(2009-09-29)» 編集

Route 477



2009-09-28

[ruby] Structを使って簡単にクラスを定義するtips

Structを使うと、いちいちattr_readerとか書かなくていいのが楽だし、オープンクラス使えばメソッド追加だってできる。

  Identifier = Struct.new(:tag, :attributes)

  class Identifier
    attr_accessor :text
 
    def initialize(t, a={})
      super(t, a)
    end
  end

…という話は知ってる人が多いと思うけど、同じことをこう書いてる例を見つけて驚いた。

  Identifier = Struct.new(:tag, :attributes) do
    attr_accessor :text
 
    def initialize(t, a={})
      super(t, a)
    end
  end

Struct.newがブロック取れるとか知らなかったぜ(1.8.6/1.8.7/1.9.1で確認) るりまにも書いてないな。

[ruby] begin-endを使って関数的な書き方をするtips

    def webrat_session
      @_webrat_session ||= begin
        session = Webrat.session_class.new
        session.adapter = Webrat.adapter_class.new(self) if session.respond_to?(:adapter=)
        session
      end
    end

beginなんだけどrescueしない。Schemeのbegin、CLのprognのような使い方。初めて見た気がするけど、関数的(<=>手続き的)な書き方ができていいかも。