構想ノート3:華和梨の仕様案あれこれ

set系コマンドで複数値を格納

一時エントリ等で、たまに複数の値を一気にエントリに設定したい場合がある。 この場合、従来はこう書く。

pushstr @a ABC;

pushstr @a DEF;

pushstr @a XYZ;

#@aエントリにABC、DEF、XYZの3個の単語が格納された

しかし、これは気持ちとしては一気に書きたい。例えば次のように。

setstrvect @a ABC DEF XYZ;

#@aエントリにABC、DEF、XYZの3個の単語が格納された

set系コマンドが初めからそうでもよかったが、歴史的事情からそうなってない。 今からset/setstrをこの動作にするのは、混乱をきたすので別命令で実装が妥当。

エントリ呼び出し時に引数指定

現在の実装では、ユーザ定義コマンドの実体は「引数を与えて呼べるエントリ」である。 これと同様に、通常のエントリを引数を与えて呼べてもいいのではないか。 里々のcallと同じこと。

#例

call hoge ABC DEF XYZ;

# hogeエントリを$@arg[1]="ABC",$@arg[2]="DEF",$@arg[3]="XYZ"の状態で呼ぶ

Phase 8の実装案の一つとして、関数自体をエントリ化*1の案もあった。 この「関数自体をエントリ化」は、言語仕様としてはシンプルかつ拡張性もよいが、後方互換の観点で見送られたように記憶している。 だが、この「エントリを引数付きで呼ぶ」が可能だと、C言語等で言う所の関数テーブルの実装が素直になるなど、一定のメリットが今でもあると考える。

さとー個人の意見として、「グローバルエントリ名空間を汚す」という理由で実装を見送っているlambdaコマンド(無名関数)を、「一時エントリへ無名関数を格納」という形で実質的に回避出来るのではないかと思っている。とはいえ、要検討。


*1 つまり、$(hoge)コマンドはhogeエントリの内容を@arg付きで呼ぶことを意味する。

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-02-12 (火) 01:21:16