while without blockNo.02090
たけのこ さん 03/07/01 09:32
 
たけのこです。

hidesoft.4から引っ越してきました(『現行』の秀丸でも生じる『マクロの書き
方』の問題なので、向こうかと思いましたが)。

マクロでwhile(boolean);って書き方とwhile(boolean){}って書き方が等価じゃ
ないようです。というか、前者の書き方が『空文を繰り返す』ことを認識してく
れません。例えば

while(true);
insert "a";

とした場合、意図した動作は『見た目は何も起きない無限ループ』ですが、結果
は『"a"が無限に挿入されるループ』になります。ちなみに、

while(true){}
insert "a";

は意図した動作です。例えでは変ですが、booleanが『常に状態変化を起こす
式』であった場合は、空文を繰り返すこともあるので、こういう書き方は普通に
やっちゃう人もいそうです(個人的には{}の空文にしているので、今まで気付き
ませんでしたが)。

秀丸3.19と4.00β3〜5、鶴亀2.91, 2.92で確認しました。これって仕様(秀丸的
に意図した動作)でしょうか?


(^^)/”

[ ]
RE:02090 while without blockNo.02098
たまがわ さん 03/07/01 13:37
 
たけのこさん、こんにちは。

 ブロックが使える命令として、while の他に if がありますが、マクロヘルプを見
ると if のところに以下の例が載っていますね。

if(result ==yes )
    message "了解です";
else
    message "取り消しです";

 おそらく、while でもこれと同じブロックの解釈がなされていると思われます。
 つまり、while ( ) の後に命令がない場合は、次の行に続くものと解釈されると考
えられます。
 while ( ); のセミコロンには意味がなく、while ( ) でも while ( );;;;; でも、
具体的な命令が記述されていないことには変わりないということです。

 確かにわかりにくいので、良い悪いの意見はあると思いますが、解釈自体には一定
のルールがあるようです。

[ ]
RE:02090 while without blockNo.02110
秀丸担当 さん 03/07/02 16:45
 

>while(true);
>insert "a";
>
>とした場合、意図した動作は『見た目は何も起きない無限ループ』ですが、結果
>は『"a"が無限に挿入されるループ』になります。ちなみに、

試してみたところ、言われているようになりました。
これは仕様というか、意図した動作ではありません。
このような書き方に対応していないので、この書き方はしないようにしてくださ
い。

[ ]
RE:02110 while without blockNo.02115
秀まるお さん 03/07/03 11:02
 
 僕の方で直します。

[ ]