しばらく別の活動をしていて、こっちのことをほったらかしにしてしまっていたんだけど、ネックになっている変数の仕様をどうしようか、ようやく方針がまとまったので書いておく。
erabasicの変数は基本的に配列で、添え字を省略すると0番目を参照するようになっている。これを再現するのが非常に困る。なので、再現は諦める。
まず、erabasic由来の組込の大域変数は配列とする。添え字は省略不可。でも一文字変数とか0番目しか使わないから添え字省略して使いたいとか結構あるので、添え字を省略するための記法を導入する。
A[0] = 0
print to_str(A[0]) # => 0
print to_str($A) # => 0
$A = 1
print to_str($A) # => 1
print to_str(A[0]) # => 1
$ではじまる変数はRubyではグローバル変数として扱われる。実は定数も再代入できるのでグローバル変数みたいに使えたりするし、実際Rubieraでもそうしているけれども、グローバル変数を使うときにはプレフィックス$をつけるというのがRubyの本来の仕様。
Rubyのグローバル変数は書き換えられたときにフック処理を呼び出せるようになっている。なので、$Aに何か代入されたら、同じ値をA[0]にも代入すればいい。逆に、A[0]への代入はメソッド呼び出しなので、値を代入するときは一緒に$Aにも代入すればいい。常にお互いが同じ値を保持すれば、見かけ上同じ変数のようになる。
これで既存スクリプトの移植の目処は立った。後は頑張って移植するだけ。
コメントをかく