第二の選択肢はこれだ
最初の代入の後、変数が同じメモリ位置を指していることが判明しました。
if(firsttime) { backup = StringVal;
これはどのようなものなのでしょうか?
一例です
extern string StringVal = "string"; string backup = ""; bool firsttime = true; int init() { Print("========================="); Print("StringVal=",StringVal," backup=",backup); if(StringVal != backup){ if(firsttime) { backup = StringVal; Print(" First Call ===> backup = StringVal"); } Print("StringVal=",StringVal,"< > backup=",backup); } firsttime = false; } int start() { }
wlad:
エキスパートとしてコンパイルすると
で、StringValを変更すると、すぐにバックアップが変更されます。
と呼ばれ、最後のPrintは
どこに問題があるのか?
まあ、手動でStringValを変更すれば、すぐにinitは動作するわけですが......その 通りです。
init()が動作することは明らかです。
問題は、2.他の条件とは無関係に変数が更新されることです
アップデートの条件がないのに、アップデートが行われます。
StringValを変更したら、同時にfirsttimeをfalseに変更する
Yes, it's all clear
問題は、2.他の条件と関係なく変数が設定されること
ALWAYS
大問題
以下はその一例です。
第一の変数の値が第二の変数に一度だけ 渡され、第二の変数の値はプログラムのさらなる実行時に 変更 されないこと。
が、1つ目の変数が変わるたびに2つ目の変数の値が変わる のは、 本来なら
extern string Value = "O"; string temp_=""; bool firsttime=true; int start() { string txt=StringConcatenate( " Value: ",Value,"\n", " temp_: ",temp_,"\n", " firsttime: ",firsttime); if(firsttime) { temp_=Value; firsttime=false; } // значение присваевается тольо ОДИН раз Print(txt); Comment(txt); }
wlad:
extern変数が変更されるたびにEAが再起動されるため、グローバルレベルで宣言された変数が初期化されることになる。これは正しい。これを避けたい場合は、Global Variablesを 使用します。
以下はその一例です。
第一の変数の値が第二の変数に一度だけ 渡され、第二の変数の値はプログラムのさらなる実行時に 変更 されないこと。
が、1つ目の変数が変わるたびに2つ目の変数の値が変わる のは、 本来なら
Sepulca:
extern変数が変更されるとEAが再起動し、グローバルレベルで宣言されている変数が初期化される。これは正しい。これを避けたい場合は、Global Variablesを 使用します。
extern変数が変更されるとEAが再起動し、グローバルレベルで宣言されている変数が初期化される。これは正しい。これを避けたい場合は、Global Variablesを 使用します。
誤 - 初期化を全く行わない
以下は、ヘルプにある証明です。
グローバル変数の初期化は、プログラムがクライアント端末のメモリにロードされた直後に一度だけ 行われます。
また、一般的には、初期化ではなく、変数の変更について
コードをよくお読みください
また、この問題は文字列 型の変数のみで発生します
他のタイプでも問題なし!
取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
エキスパートとしてコンパイルすると
で、StringValを変更すると、すぐにバックアップが変更されます。
と呼ばれ、最後のPrintは
どこに問題があるのか?