|
久々に意味の分からない現象に遭遇したので質問です。
皆さんの環境で以下のMsgBox関数を実行すると どのような結果になるでしょうか…?
MsgBox(7++7++++7)
|
No.5051 2018/01/22(Mon) 23:19:10
|
☆ Re: 加算演算子の連続について / satocha |
|
|
???147ですか???
「7++7」までは数値として解釈できる(7+(+7))ので14。 以降は空文字を結合して最後に7を文字列変換して結合、という感じでは? msgbox(+)がエラーにならず何もない出力ウインドウを出していますね。
|
No.5053 2018/01/23(Tue) 00:37:05
|
|
☆ Re: 加算演算子の連続について / ミリアム |
|
|
147になりますよね。
加算演算子と単項正演算子ってことですか…?
実を言うと、簡略化のために数値にしたのですが msgbox("A"++"B") みたいなのでも普通にエラーにならず結合されるのですが。
ちなみに+が3つのときだけエラーになります。
|
No.5054 2018/01/23(Tue) 03:08:32
|
|
☆ Re: 加算演算子の連続について / satocha |
|
|
数値変数aを明示的に文字列にするとき、「a+""」なんてやりますが、どうやら「a+」だけでいいようです。 「a++」と二つつけてもOKだけど、とんでもなく誤解されそう。
a=3 b=a+ c=a++ d=a+++ e=a++a f=a++a++ msgbox(b) //3を表示 msgbox( vartype( b ) ) //258 ユニコード文字列 msgbox(c) //3を表示 msgbox( vartype( c ) ) //258 ユニコード文字列 msgbox(d) //3を表示 msgbox( vartype( d ) ) //258 ユニコード文字列 msgbox(e) //6を表示 msgbox( vartype( e ) ) //5 倍精度浮動小数点数 msgbox(f) //6を表示 msgbox( vartype( f ) ) //258 ユニコード文字列
>ちなみに+が3つのときだけエラーになります。 「a+++」のように最後に何もつけないでいると、エラーにならないみたいです。 「s=+++」とすれば、sに空文字列が代入されます。length(s)は0、vartype(s)は258。
|
No.5055 2018/01/23(Tue) 07:18:46
|
|
☆ Re: 加算演算子の連続について / stuncloud |
|
|
この手の「何も書かなかった場合」の値はEMPTYだと思いこんでたんですけど、そういうわけでもなさそうですね…?
|
No.5060 2018/01/24(Wed) 11:05:45
|
|
☆ Re: 加算演算子の連続について / satocha |
|
|
「+」記号だけではないみたいです。 次のような書き方はみなエラーにならず""が代入されます。 a== a=* a=! a=/
検証スクリプトを走らせたところ、「=」記号の働きは特に変わっていることに気付きました。 a== //a=""と同じ a=== //a=trueと同じ a==== //a=trueと同じ a===== //a=falseと同じ 以下「=」の数をいくら増やしてもaにはfalseが代入されるみたいです。
---------------------------検証スクリプト hashtbl vartype_s for item in split( _vartype_s, "<#CR>" ) key =token( " ", item ) value =item vartype_s[ key ] =value vartype_s[ value ] =key next
string="" for op in split( ",+,-,*,/,=,!,++,--,**,*+,//,==,!!,+++,---,***,*+*,**+,///,===,====,=====,======,!(===),!!!", "," ) try v =eval( op ) string =string + "vartype of eval( <#DBL>" + op + "<#DBL> ) = " + vartype_s[ vartype(v) ] string =string + "<#TAB> value of eval( <#DBL>" + op + "<#DBL> ) = <#DBL>" + v + "<#DBL><#CR>" except string =string + "error on eval( <#DBL>" + op + "<#DBL> )<#CR>" endtry next
sendstr( exec("notepad"), string )
textblock _vartype_s VAR_EMPTY 0 VAR_NULL 1 VAR_SMALLINT 2 VAR_INTEGER 3 VAR_SINGLE 4 VAR_DOUBLE 5 VAR_CURRENCY 6 VAR_DATE 7 VAR_DISPATCH 9 VAR_ERROR 10 VAR_BOOLEAN 11 VAR_VARIANT 12 VAR_UNKNOWN 13 VAR_SBYTE 16 VAR_BYTE 17 VAR_WORD 18 VAR_DWORD 19 VAR_INT64 20 VAR_ASTR 256 VAR_USTR 258 VAR_ARRAY 8192 endtextblock
---------------------------------- メモ帳への出力結果 vartype of eval( "" ) = VAR_EMPTY value of eval( "" ) = "" vartype of eval( "+" ) = VAR_USTR value of eval( "+" ) = "" error on eval( "-" ) vartype of eval( "*" ) = VAR_USTR value of eval( "*" ) = "" vartype of eval( "/" ) = VAR_USTR value of eval( "/" ) = "" vartype of eval( "=" ) = VAR_USTR value of eval( "=" ) = "" vartype of eval( "!" ) = VAR_USTR value of eval( "!" ) = "" vartype of eval( "++" ) = VAR_USTR value of eval( "++" ) = "" error on eval( "--" ) error on eval( "**" ) vartype of eval( "*+" ) = VAR_USTR value of eval( "*+" ) = "" error on eval( "//" ) vartype of eval( "==" ) = VAR_BOOLEAN value of eval( "==" ) = "True" error on eval( "!!" ) vartype of eval( "+++" ) = VAR_USTR value of eval( "+++" ) = "" error on eval( "---" ) error on eval( "***" ) vartype of eval( "*+*" ) = VAR_USTR value of eval( "*+*" ) = "" error on eval( "**+" ) error on eval( "///" ) vartype of eval( "===" ) = VAR_BOOLEAN value of eval( "===" ) = "True" vartype of eval( "====" ) = VAR_BOOLEAN value of eval( "====" ) = "False" vartype of eval( "=====" ) = VAR_BOOLEAN value of eval( "=====" ) = "False" vartype of eval( "======" ) = VAR_BOOLEAN value of eval( "======" ) = "False" vartype of eval( "!(===)" ) = VAR_BOOLEAN value of eval( "!(===)" ) = "False" error on eval( "!!!" )
|
No.5064 2018/01/25(Thu) 07:11:45
|
|