えーっと、何だっけ。短期 ToDo
ungets したくない?
うーむ、知らない間にかなり中身が変わっている……。 しかもテストに通らない。extend かそれとも define_method が悪いのか。
原因判明。define_method の中で super するとスーパークラスの別のメソッドを呼べなくなる。 普通に def すると呼べるので、define_method がなんらかのきっかけになっているようだ。
module Super def test m() # define_method を使っているとここで失敗する end def m puts 'OK' end end module M include Super #def test # こっちだとOK define_method(:test) do # こっちだとNG super end end class C include M end C.new.test
とりあえず module_eval に戻しておくとしよう。
しかし、おれって凄い確率で Ruby の秘孔を突いてるような気がするなあ。 ここまで運がいいとちょっと考えてしまうね。
あー、そういえば RHG 書いてる途中で ARGF が EOF に ならなくなるバグを見付けたんだった。条件を追ってみよう。
やっぱりまだあるじゃん……
改修と言えば setup.rb も酷いのでどうにかしたいな。 どう見ても継承使いすぎだ。
ファイナルファンタジーのシステムはシリーズごとに スクラッチから書き直してるそうですよ。
Copyright (c) 2002-2007 青木峰郎 / Minero Aoki. All rights reserved.
>ゲーム開発
複数チームでローテーションしてて一周する頃にはゲーム機の世代が代わってて再利用しにくいとか、毎回ゲームシステムに合わせてかりかりチューンかけるのでシステムが変わると書き直した方が速いとか、人のコード使うより自分で書いてみたいとか、ソースがどっかいっちゃったとか、まあ色々訳があるのでしょう。たぶん。
(個人レベルでは部分的に使い回しているコードはかなりあると思いますよ)。
ゲーム機は本当に世代交代が激しいですもんねえ。
それに速度要求もやたら厳しいし。言語 (アセンブリ) 自体が
コロコロ変わるんじゃ、たしかにライブラリをためる余裕も
ないかも……。プレステ以降は C になったらしいですけどね。
あ、でも N64 は確かアセンブリが標準だったような気がします。
その敷居の高さでソフトの本数をかなり減らしたとかなんとか。
それって、Cの非万能性をそれだけ雄弁に物語る証拠だったりするわけですよね?
ゲーム機に継続が必要かどうか(笑)は知らないけど、
それ以外の多くの場面できっと、Cじゃすっきり記述できない個所が多い、んだろうなあ…
#高級低級とはまた違う話として。