2005/10/27(木)ApolloのPanelでinitializeがオーバーライドできなかった理由
2005/10/26 26:00
class MyPanel < Phi::Panel def initialize # ≪処理≫ end end MyPanel.newというコードを書いたのだが、≪処理≫が実行されない(本来なら処理の前にsuperを書くが、わかりやすくするために削った)。
で、この場合newで呼ばれるのはPhi::Panelのコンストラクタのようで、オーバーライドしたはずのinitializeを通らない。
これはどうやらPhi::Panel上でnewが再定義されている所為らしい。下はGtkの記事だがApolloでも似たようなことをやっているのではないかと推測。再定義したnewはinitializeを呼ばないという解釈で良いと思う。
http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/5885
いやちゃんとソース読んで無いので確証はないのだが(読み方すら分からない)。
ということで、
class MyPanel < Phi::Panel def MyPanel.new # ≪処理≫ end end MyPanel.newとしてやれば願いが叶う。newはクラスオブジェクトのメソッド(こういう言い方でいいんだっけ?)なので、def newではなく、def MyPanel.newと書く。superは省略したが、ちゃんとやるならもちろん返り値の設定までしてやらなきゃいけない。
ret = super ≪処理≫ ret≪処理≫の中でプロパティいじるような目的がほとんどだと思うので、こんな書き方が定番になるんだろう。initializeと大きく異なるのはこの中でselfを呼ぶとクラスオブジェクトが返ってくることだ。
class B end class A < B def A.new ret = super p self ret end end p A.new --出力-- A #<A:0x2bb42c8>つまりこうか。
プロパティを設定するときはsuperの返り値(ここではret)に対して設定してやらなきゃならない。
#追記
newからinitializeを呼んでやった方が汎用性が高い。
2005/10/13(木)Apolloメモ
2005/10/13 11:00
Kernel.printとする。
……暇があったらソースを覗いてみたいなあ。
2005/10/13(木)Apollo把握
2005/10/13 8:00
・VCL全てが網羅されているわけではない
無いコンポーネントがある。例えばTControlBarは実装されていないようだ。ただし、VCL6再配布可能ライブラリで使えないもの、Win9x系のコンポーネントが大半であるようなので大きな問題にはならないか。
無いプロパティ・メソッドが一部ある。Rubyで実装した以上必要なくなったものもあるはずなので、問題が出るかどうかは今のところ不明。
・クラス・メソッドの命名規則はRuby側に直されている
[参考]
ap-doc@freeml.com/0000009" TARGET=_top>http://www.freeml.com/message/ap-doc@freeml.com/0000009
・VCLのグローバル関数は引数の順番や有無が変わっている
主に混乱しそうなのはメニュー関係。とりあえず下を見る。
http://wiki.fdiary.net/apollo/?Phi-Functions#l51
・VCLにない機能も備わっている
ただしドキュメントが少ない? on_drop_filesは最初無いのかと思ってしまった。
http://wiki.fdiary.net/apollo/?tut-tut_intro
ここのクラスブラウザーはwindowsではどうも動かないような気配だし、今のところmethodsやconstantsをうちながらいちいち確認している。
とりあえずこれくらいを把握しておけば簡単なGUIは組めそうである。
2005/10/11(火)visualurubyのWindows系定数について
2005/10/11 12:00
要はWIN32API(?)のラッパーなので、
http://yokohama.cool.ne.jp/chokuto/urawaza/message/index.html
http://yokohama.cool.ne.jp/chokuto/urawaza/prm/window_style.html
ここら辺で調べる。表示例付のリファレンスはあんまり見当たらないな…… その点ではVCLリファレンス、
http://www.kanazawa-net.ne.jp/~pmansato/VCL_B.htm
が優秀だが、対照検索しなければならないのはさすがにきつい。
最近のMSDN はそこそこ軽いのでオンラインを厭わなければまあそっちでもいいか。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_mfc_structures.2c_.styles.2c_.callbacks.2c_.and_message_maps.asp
2005/10/06(木)rdocを使ってみる
2005/10/06 12:00
何も考えずにコメント書いても通るのはけっこう好み。
今の作り方はこう。
rdoc -o <出力パス> -c shift_jis -T kilmer *.rb
- Tはテンプレートでkilmerの方が若干見やすいが、出力しない項目もあるのでテンプレートを指定しない場合と見比べて好みのものを選べばいいだろう。
とりあえず目についたところで定数(constants)を出力しないのを直した。というかほとんど単なるコピペ。
>diff kilmer.rb.orig kilmer.rb 310a311,330 > IF:constants > <table cellpadding=5 width="100%"> > <tr><td class="tablesubtitle">Constants</td></tr> > </table> > <div class="name-list"> > <table summary="Constants"> > START:constants > <tr class="top-aligned-row context-row"> > <td class="method-name">%name%</td> > <td>=</td> > <td class="context-item-value">%value%</td> > IF:desc > <td width="3em"> </td> > <td class="context-item-desc">゙sc%</td> > ENDIF:desc > </tr> > END:constants > </table> > </div> > ENDIF:constants(すんませんKShikiのタグ置換に引っかかって見られません。ソース表示なら…)
ところで私はよくこういうコードを書いてしまうのだが、
class square def initialize(w, h) @width = w @height = h end def get_area return @width * @height end endrdocだとこの場合のインスタンス変数は出力してくれない。
それが当然のような気もするし、出力して欲しい気もする。
<rdoc書き方>
http://www.kmc.gr.jp/~ohai/rdoc.ja.html
2005/10/05(水)firefoxでtarget
2005/10/05 8:00
<a href="****.html" target="right">などと書いてもtargetが有効にならないようだった。targetが目の敵にされているのは知っていたので、firefoxでは打ち切ったのかと思ったが、単に1.0.7にしたら直っていた。
それにしても最早frameそのものも嫌われ者らしい。セキュリティ云々の話は分かるのだが、私のような素人にそれをいわれて、もきちんと書くためのコストより実装容易性を優先してしまう。
簡便さとセキュア・ストリクトをつなぐフリーなツールを作ってください、誰か。
2005/07/23(土)website access analyzer調整
2005/07/23 12:00
WAAのオーナーアクセス非記録に関する設定は、一見設定ファイルに保存しているように見えるが実はcookieの方が設定値の実体だった。
設定ファイルの値は常に、
WaaOwnerAccess_kurukuru=true
となっていて、設定画面での「自己アクセスのログ保存」はcookieにtrue,falseを設定するようになっている(ここら辺コメントアウトと書き直しの嵐が(笑)。値の読み出しもcookieを読みに行っている。
問題点というとアレだが、cookieが溢れて消え始めるとこの設定のみが吹っ飛んだように見える。それで調子が悪い?と思ってしまったわけ。
書き直すのもめんどくさいので保留。アクセス解析ソフトはいつも気になると探してみるのだけど、waaは軽量さや使い勝手は非常に良いのでなかなか離れられない。
今度暇があったら検索ワード抽出機能追加してみたいなあ。
ついでにOSにWinXPの情報がなかったので追加。
waa_os.iniに
> WinXP=WinNT 5.1,Windows NT 5.1
2005/05/25(水)Ruby execで*.rbを呼ぶとき
2005/05/25 5:00
exec('test.rb')としても
`exec': Exec format error
となってうまくいかない。
多分Rubyのexecは(たとえrubyのファイルであっても)関連づけを解決しないのだろう。
ということで、
exec('ruby test.rb')が正解。
2005/04/07(木)STL
2005/04/07 15:00
今度勉強しよう……
ところで、正規表現はいつ標準実装になりますか。
2005/03/10(木)perlモジュールの確認方法
2005/03/10 23:00
$ perl -mTime::HiResとして通ればインストールされており、通らなければインストールされていない。
バージョンは/usr/lib/perl/5.8/の、*.pmファイルの$VERSION変数に代入される値を見れば良い。
でも、もっとまともな方法がある気がするなあ。
perlわかんね。