エラー、バグ、質問 - ページ 714

 
victorg:

マクロとインライン関数は確かに別物です。でも、そういうことではないんです。以下は、コンパイル時に引数の値が不明な場合の例です。

最初のケースでは、コードを現在の関数に貼り付ける必要があり(推測)、2番目のケースでは、スタックを介して渡されたパラメータで 関数が呼び出される(推測)。しかし、最適化のために、コンパイラは実際には2番目の変形も代入で実装することがあります。そうなんですか わからない。だから聞いたんです。

拷問を受けなければならないのはメタクボットのほうだ。しかし、私の意見はあなたと同じです(最適化のため、結果は異なるかもしれません)。
 

楕円オブジェクトは、アンカー ポイントをマウスでクリックした場合のみハイライトされます。

バグなのか機能なのか?非常に不便な実装になっています。

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов - Документация по MQL5
 
垂直スケールを手動で設定した場合は、再起動時に記憶されません。また、迷惑な話。
 
MetaDriver:

Это что, юмор такой чёрный?

1.  Извини, - бред.  Я понимаю, тут паранойя в моде, и является ломовым аргументом за "почему так не надо делать".  Никакой опасности не вижу в упор. Смотрел внимательно, если чё.  Любое имя, в конечном счёте есть ссылка.  Индексация есть обычное расширение понятия имени. Не более.  Давай запретим присваивание вообще.  В целях безопасности.  Ссылки же крайне опасны так?

2.  Духу объектно-ориентированного программирования, при такой логике, яростно противоречат С++, С#, Делфи, пара дюжин менее популярных языков, в которых индексаторы совершенно нормально работают и справа и слева.  Причём здравому смыслу и моему духу это почему-то не противоречит.

Индексаторы делаются для связи с внешней средой.  Их функция именно интерфейсная.  Я могу инкапсулировать и прятать что угодно, но индексы мне нужны для оперирования объектами как массивами. Фактически все массивы как-то устроены. Например обычные динамические массивы mql. Может запретим их слева от оператора присваивания ставить?  Заменим функцией какой-нибудь типа SetArrayValue(array, i, j, value);  Заодно и в читабельности выиграем. Да и отладка станет куда проще.  Мля. Уф..

3.  А как насчёт того, чтоб сделать нормальный индексатор?  Горничная это конечно классно, но королева всё-таки лучше.

4.  Вот в этом месте у меня крыша конкретно начала ехать.  Это что, нечитабельно??

Вот это читабельнее, да?

  t.setDataElement(i, i*i);

Круто.  Пожалуй пойду лечиться.

5.  Ваще круто.

6. Я плакаль.


e(array, i, j, value); こうすることで、可読性も向上します。デバッグも楽になるしね。 やばい。うっ...

まあ、セッターは単純な方程式以上のことができるのが強みですからね。

例えば、情報を記録したり、データを変換したり(文字列やもっと複雑なデータの場合)、何か重要なことが起こったら他のオブジェクトにメッセージを送ったり(データの更新など)することができます。

日付が変わったことを、オブジェクトはどうやって知ることができるのでしょうか?どうやら引用符を保存するようですね・・・。
そうそう、これは間違った問題で、あなたのオブジェクトは構造体のようなもので、実際には何も管理していないのです。
全ては別のゴミクラスで処理され、さらに悪いことに、全ては onStart(), onTick(), ... で起こっているのです。!:)

良い一日を

 
MetaDriver:

3.普通のインデクサーを作ってはどうか? メイドもカッコイイけど、クイーンの方がいい。

ムーティガスケットしかし、通常のlvalueと比べると、時間的にはかなり高くつくでしょう。でも、必要な形にはなりますよ。

______

ああ、とんでもない。それなら、タイプゴースト 演算子のオーバーロードが必要です。可哀想に。

 
speedy:

まあ、セッターの利点は、単純な方程式以上のことができることです。

例えば、情報を記録したり、データを変換したり(文字列やもっと複雑なデータの場合)、何か重要なことが起こったときに他のオブジェクトにメッセージを送ったり(データの更新など)することができます。

日付が変わったことを、オブジェクトはどうやって知ることができるのでしょうか?どうやら引用符を保存するようですね・・・。
そうそう、あなたのオブジェクトは構造体のようなもので、実際には何も制御していないので、誤った問題なのです。
全ては別のゴミクラスで処理され、さらに悪いことに、全ては onStart(), onTick(), ... で起こっているのです。!:)

良い一日を

ポイントは、インデクサはセッターと機能的に 同じ であること これは関数と全く同じように実装されており、その中身は何でもよく(最も単純な典型例は配列の境界チェックとその他のエラー処理)、単に配列の項目への 参照を返すだけではありません。

あなたも良い一日をお過ごしください。

(昨日の調子ですみません。ちょっとイライラしていました。あなたは何もしていない。まあ、あまりに断定的でなければね :)

Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Основы языка / Переменные - Документация по MQL5
 
TheXpert:

ムーティガスケットしかし、通常のlvalueと比べると、時間的にはかなり高くつくでしょう。でも、必要な形にはなりますよ。

______

ああ、とんでもない。その時は、型変換 演算子をオーバーロードする必要があります。残念です。

実際、私は彼らがやると思います。 言語に参照リターンの明らかな欠陥があるのです。

参照変数を作る必要はないが、関数からのl値返しは神聖なものである...。:)

この言語には通常のmql-arrayがあり、代入演算子の両側で非常にうまく機能しています。しかし、これらは実装上は C++ のクラスです !

同じシリーズの別の例です。 このコードはコンパイルできますが、動作しません。

#define _MyContainer(name,type,size)  struct name { public: type array[size]; type At(int i) {return array[i];} }
#define  ASize 8
#define  BSize 4

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   _MyContainer(MyClass, int, ASize);
   MyClass MyVar;
   Print(sizeof(MyVar)); 
   for(int i=0;i<ASize;i++)
     {
      MyVar.array[i]=i*i;
     }
   for(int i=0;i<ASize;i++)
     {
      Print(MyVar.At(i));
     }
   _MyContainer(My2DBag, MyClass, BSize);
   My2DBag MyVar2D;
   for(int i=0;i<BSize;i++)
     {
      for(int j=0;j<ASize;j++) MyVar2D.array[i].array[j]=(i+1)*(j+1);
     }
   for(int i=0;i<BSize;i++)
     {
      for(int j=0;j<ASize;j++) Print(MyVar2D.At(i).At(j));
// Run-time ERROR:  DefTest (USDJPY,M30)  invalid pointer access in 'DefTest.mq5' (38,46)

//      for(int j=0;j<ASize;j++) Print(MyVar2D.array[i].At(j));
     }
  }

私が言いたいのは、コンパイルしてはいけないということではなく、動作させるべきだということです。:)

 
MetaDriver:

...
コンパイルするなとは言っていない、動くはずだと言っているのだが...。:)

はい、おっしゃるとおり、コンパイラのエラーです、修正します。
 

MQL5には、Other定数グループに属する素晴らしい定数IS_DEBUG_MODEが あります。テスター用の定数を追加することは可能ですか?IS_TESTER_MODEみたいな...。

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5
 
denkir:

MQL5には、Other定数グループに属する素晴らしい定数IS_DEBUG_MODEが あります。テスター用の定数を追加することは可能ですか?IS_TESTER_MODEみたいな...。

この定数ではダメなんでしょうか?

enum_mql5_info_integer

識別子

商品説明

物件タイプ

mql5_program_type

mql5-programの種類

enum_program_type

mql5_dlls_allowed

現在実行中の プログラムのDLLを使用する許可

ブール

mql5_trade_allowed

本ランニング プログラムでの取引 許可

ブール

MQL5_DEBUGGING

デバッグモードで動作しているプログラムのサイン

ブール

MQL5_TESTING

テスターでのプログラム実行のサイン

ブール

mql5_optimization

最適化中のプログラム実行のサイン

ブール

mql5_visual_mode

ビジュアルテストモードでのプログラム実行のサイン

ブール