|
|
||
tDiary-develでextendを使えばいいと言うだけで、extendについての説明をしなかったので、ERB::Util.hをクラスメソッドで使いたい場合のextendについての説明です。
module Hoge def hoge puts "hoge" end end
というmoduleがあったとして、obj.extend Hogeというのは
def obj.hoge puts "hoge" end
と同じようなもの。
class Foo end foo = Foo.new foo.extend Hoge
なら
def obj.hoge puts "hoge" end
相当。
class Bar extend Hoge end
ならextend Hogeの部分はself.extend HogeやBar.extend Hogeと同じなので
class Bar def self.hoge puts "hoge" end end
相当になる。
mputの日記。 - RubyConf2006 一日目で見つけたtypoらしきものとか。
create_makefileのかわりにMkrf::Generator.newはどうかと思うのだが……なんでこっちの人はこんなにイテレータが好きなの?
http://subtech.g.hatena.ne.jp/secondlife/20061012/1160641587 を見てちょっとやってみたら、例外のmessageがちゃんと復元されなかったので、作りかけでやめてしまった。
「インスタンス変数が復元できない」とか書いてるけど、YAML.dumpしてYAML.loadすると普通はちゃんと復元される。
メッセージの形式はメソッド呼び出しがハッシュのキーにメソッド名で値に引数をYAML.dumpしたものを"\0"終端で。gets("\0")というのはRailsChatのまね。
YAML.dumpされた中にはちゃんとメッセージが入ってるのに復元されないと思ったら、@mesgというインスタンス変数に入ってしまっていた。
require 'yaml' yaml = YAML.dump(StandardError.new('hoge')) p yaml #=> "--- !ruby/exception:StandardError \nmessage: hoge\n" e = YAML.load(yaml) p e.message #=> "StandardError" y e #=> # --- !ruby/exception:StandardError # message: StandardError # mesg: hoge p e.instance_eval { @message } #=> nil p e.instance_eval { @mesg } #=> "hoge"