トップ «前の日記(2004-06-24) 最新 次の日記(2004-06-26)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2004-06-25

_ 栗よりうまい十三里半

日本橋から川越まで13里半なのか?

変だと思ったら、完全に洒落+語呂だけのようだ

_ 失敗したもの

WIN32OLE::ARGV

読み取り専用にしたいがためにクラス定数にしたがウカツだった。

これのせいで、-dを付けようものなら呼び出しの都度定数への代入警告がバカスカ出力されるのだが、どうしたものか、またはどうにかなっているかな?

C:\Home\arton\test>ruby -d ie.rb

ie.rb:13: warning: class variable ARGV of Object is overridden by WIN32OLE

ie.rb:17: warning: class variable ARGV of Object is overridden by WIN32OLE

今なら内部的にはインスタンス変数として、取り出し用にメソッドを用意すべきだった。

class WIN32OLE

def initialize()

@last_arguments = nil

end

...

attr_reader :last_arguments

end

こんな感じ。でも名前が変わるのはまずいだろうから

class WIN32OLE

@@argv = nil

def initialize()

@last_arguments = nil

end

def method_missing

obj.invoke

last_arguments = _

@@argv = _c #クラス変数へ最後の引数を保持

end

...

attr_reader :last_arguments

def ARGV() # こんなメソッド名は許されている?

@@argv

end

end

と、取り合えずメモ。

_ あれ?

何やってんだか、9;00だというのについ調べ始めてしまったが、win32ole.cを読むと配列のインスタンスを最初に代入した後は、その配列のインスタンスのclearを呼んでプッシュするだけで、定数そのものへの代入は行っていないな……、と言うか、そう書いたんだからそりゃそうだ。とは言えミュータブルオブジェクトな定数というのがそもそもまずい選択だったわけなのだが。

なんで代入そのものを行っていないのに警告されるんだ?

該当メッセージはvariable.c#cvar_override_checkで、これを呼ぶのはrb_cvar_set (当然) だけではなく、rb_cvar_get ……なぜ?

#ということは、rb_define_constへ与えるrb_ary_newの結果をwin32ole.cで保持しておいて、それを直接操作すれば警告は出なくなるってことだな。

_ おおなるほど

僕はエラーメッセージの意味を正しく理解してなかったわけですね、そりゃ??となるはずだ。

#グローバルなARGVがObjetの定数として持たれていることがわかってなかったってことだけど、rb_define_global_constを見れば一目瞭然だし。

ちなみに1.9以降で解消ということなので、いじるのはやめてしまおうかなと思いつつあります。


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|

ジェズイットを見習え