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のような使い方。初めて見た気がするけど、関数的(<=>手続き的)な書き方ができていいかも。