HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0211
木村旧疑似関数命令におけるエイリアス禁止が有効になっている件について1解決


木村

リンク

2010/2/11(Thu) 19:14:59|NO.30526


#module #deffunc modmes1 str エイリアス ローカル変数=エイリアス mes strmid(ローカル変数,2,8) return #deffunc modmes2 str エイリアス mes strmid(エイリアス,2,8) return #global 文字列="ひゃっはぁーっ" modmes1 文字列 modmes2 文字列 stop
 上記のソースを流せば分かるとおり、modmes1は真っ当に動いても、modmes2は真っ当に
動きません。modmes1とmodmes2の違いはエイリアスをstrmidに直に入れているかいないかの
違いだけです。

 この現象はstrmid関数ばかりで起きるのではありません。instr関数でも確認しています。
 この両者は旧版(ver3未満)では疑似関数命令(命令の形を取りながらも、関数に近い挙動を
見せる命令。現在ではnoteget命令等の一部命令に見られるのみ)だったものです。
 おそらく、旧版の命令の因数受取条件として、旧疑似関数命令には変更される因数(大体の
場合は第1因数)はエイリアスではならないという条件が付けられており、その条件がver3
以降にも引き継がれた為にこのような挙動を起こすのではないかと邪推しています。

 正直、現在のstrmidやinstrはその性質上、直にエイリアスをぶち込みたい命令の一種です。
そしてぶち込んでみてエラーが起きられると、仕様の分からない初見組としては右往左往する
しかありません。
 まして、エラーの内容が『Error23 変数名が指定されていません』なのです。これでは解決
し辛いと思います。次回の更新の際には、このエイリアス禁止仕様の説明をどこかに入れて
もらえないでしょうか。



この記事に返信する


ANTARES

リンク

2010/2/12(Fri) 03:30:16|NO.30543

 寧ろ、var型以外のモジュール命令やモジュール関数の引数が
定数扱いとなることを明記すべきでしょう。
その認識があれば「変数が指定されていません」というメッセージで
理解できるはずですし、引数名と(他の命令・関数内で使っている)
変数名とのバッティングによるエラーなど、引数が定数扱いとなることを
認識していないと理解できないエラーがほかにもあります。

 個人的には「引数が定数扱いになる」という仕様が噴飯ものだと思いますが。



ONION software Copyright 1997-2023(c) All rights reserved.