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