*構想ノート3:華和梨の仕様案あれこれ [#x0c199dc] **set系コマンドで複数値を格納 [#f5949695] 一時エントリ等で、たまに複数の値を一気にエントリに設定したい場合がある。 この場合、従来はこう書く。 >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をこの動作にするのは、混乱をきたすので別命令で実装が妥当。 **エントリ呼び出し時に引数指定 [#s0ed1a96] 現在の実装では、ユーザ定義コマンドの実体は「引数を与えて呼べるエントリ」である。 これと同様に、通常のエントリを引数を与えて呼べてもいいのではないか。 里々のcallと同じこと。 >#例 >call hoge ABC DEF XYZ; ># hogeエントリを$@arg[1]="ABC",$@arg[2]="DEF",$@arg[3]="XYZ"の状態で呼ぶ Phase 8の実装案の一つとして、関数自体をエントリ化((つまり、$(hoge)コマンドはhogeエントリの内容を@arg付きで呼ぶことを意味する。))の案もあった。 この「関数自体をエントリ化」は、言語仕様としてはシンプルかつ拡張性もよいが、後方互換の観点で見送られたように記憶している。 だが、この「エントリを引数付きで呼ぶ」が可能だと、C言語等で言う所の関数テーブルの実装が素直になるなど、一定のメリットが今でもあると考える。 さとー個人の意見として、「グローバルエントリ名空間を汚す」という理由で実装を見送っているlambdaコマンド(無名関数)を、「一時エントリへ無名関数を格納」という形で実質的に回避出来るのではないかと思っている。とはいえ、要検討。