eraシリーズ改造/バリアント開発の覚え書き

11月30日の雑記


input命令を実装するに当たって、result広域変数を用意しなければいけなくなったのだが、さてどういう仕様にしたものかということが悩ましい。

  • Rubyは$で始まる変数は広域変数になるので、それを使う
  • 広域変数用のモジュールを作って、そのモジュールのクラス変数およびアクセサを定義して使う
  • いずこかに変数を定義し、トップレベルで定義したアクセサを経由して使う

さすがに三番目は邪悪にすぎるだろう。そうなると一番目か二番目だ。一番目の方法は広域変数であると分かりやすいし、書くのも楽だが、書くのが楽なやり方は濫用の元にもなる。二番目の方法はいちいちクラス名を指定しなければいけないので書くのは面倒くさいが、クラスに閉じているので他のRubyライブラリとの干渉を気にする必要がないし、クラス名による指定は記号より検索性が高いというのも利点だろう。また、三番目のやり方もまずいのはトップレベルの汚染なので、それをなんとかすれば使えるのだが、今はRubieraというモジュールをトップレベルにextendしてpirntなどを上書きしているので、いまさらという話ではある。これは将来的にはFiberの実行時のスコープにだけ展開されるようにする予定なので、トップレベルの汚染は避けられるようになる……といいなあ。そうすると、Rubiera配下にアクセサを定義して呼べばブロックからはトップレベルのように見えるようになるので、これなら悪くないだろう。

あと、Rubyは動的型付けなのでresultsを定義しなくてもresultだけでよかったりするのだが、そうすると型判別を自前でやらなくてはいけないので、ここもどうするのがいいか考えどころ。is_a?とかで簡単に調べられるのだが、いきなりそういういかにもRubyっぽいやり方に慣れてくれというのもどうだろうかと思うし。

まあぼちぼちやりましょかね。いつもどおり。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

リンク

漠々ト、獏
eramaker/eramaker2の開発元の公式サイト。

Emuera - emurator of eramaker
C#で書かれたeramakerのエミュレータ「Emuera」のプロジェクトページ。

eraシリーズを語るスレ まとめ
eraシリーズ全般のまとめ。バリアント情報、改造情報など。

eratoho まとめ
eramakerのバリアント「eratoho」のまとめ。

era板
eraシリーズについての掲示板。

サブページ

Rubiera
Bitbucket上のRubieraプロジェクトページ。Rubieraのソースコードのダウンロードはここで。

管理人/副管理人のみ編集できます