マクロ・エラーのメッセージNo.00828
ひろ さん 02/03/12 17:43
 
 秀丸担当さん今日は、ひろです。
#n1 = 1;
#n2 = 1;
#n3 = 1;
if( #n1 < 0 || #n2 || !#n3 )message "error";
というマクロを実行すると、「マクロエラー:数値が指定されるべきところ
に文字列が指定されています。」となります。優先順位の関係で、エラーに
なるのは至極真っ当ですが、何故「文字列が指定されています」となるので
しょう?                         ^^^^^^

 ##ずっと、報告を忘れていた(^^;。

[ ]
RE:00828 マクロ・エラーのメッセージNo.00829
ながさわ さん 02/03/12 18:06
 
長澤です。

ヘルプによれば、'||'よりも'|'の方が優先順位が高いので、
『二項演算子が指定されているのに、右項が数値ではない('|'という文字列)!』
ってコトでエラーになっているのだと思います。
明示的に、各項を括弧でくくれば、エラーを回避できることからも、これでいいんで
はないかと思いますが、ただ、パース的にはアレですね。

#ま、普通の人ならオペレータが対象項は明示すると思いますが。


でも、

>優先順位の関係で、エラーに
>なるのは至極真っ当です

ここまで判っていれば……?

[ ]
RE:00829 マクロ・エラーのメッセージNo.00830
ながさわ さん 02/03/12 18:11
 
長澤です。

ちょい、修正。
>#ま、普通の人ならオペレータが対象項は明示すると思いますが。
#ま、普通の人ならオペレータの対象項は明示すると思いますが。

[ ]
RE:00829 マクロ・エラーのメッセージNo.00831
ひろ さん 02/03/12 20:42
 
 ながさわさん今日は、ひろです。
> ヘルプによれば、'||'よりも'|'の方が優先順位が高いので、
 「|」だけの場合も同様なので、これは関係なさそうです。

 もう一度書き直すと、
if( #n1 < 2 | #n2 )message "error";
が動いて、
if( #n1 < 2 | !#n2 )message "error";
が動かないのは、優先順位の関係で仕方がないけれど、「文字列」とでるの
が不思議です。何故なら「|」に続きには、「'」も「"」もないからです。

[ ]
RE:00831 マクロ・エラーのメッセージNo.00832
ながさわ さん 02/03/12 21:25
 
長澤です。

> もう一度書き直すと、
>if( #n1 < 2 | #n2 )message "error";
>が動いて、
>if( #n1 < 2 | !#n2 )message "error";
>が動かないのは、優先順位の関係で仕方がないけれど、「文字列」とでるの
>が不思議です。何故なら「|」に続きには、「'」も「"」もないからです。

あう、質問の意味を間違っていました。
どうも文字列≒非数値という表現のようですね。
とはいえ、そうとばかりとは云えないようで。

message str(1 + !2);

など。メッセージはパース的に発生時点が違うからでしょうか?

[ ]
RE:00828 マクロ・エラーのメッセージNo.00833
秀丸担当 さん 02/03/13 11:49
 
>なるのは至極真っ当ですが、何故「文字列が指定されています」となるので
>しょう? &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbs
>p; &nbsp; &nbsp; ^^^^^^

確かに、適切なメッセージではないようです。
適切な言葉にするようにしておきます。

[ ]
RE:00833 マクロ・エラーのメッセージNo.00846
ひろ さん 02/03/13 23:25
 
 秀丸担当さん今日は、ひろです。
> 確かに、適切なメッセージではないようです。
 宜しくお願いします。

[ ]