Errori, bug, domande - pagina 714

 
victorg:

Una macro e una funzione in linea sono effettivamente cose diverse. Ma non è questo che intendo. Ecco un esempio in cui i valori degli argomenti sono sconosciuti al momento della compilazione

Nel primo caso, il codice deve essere incollato nella funzione corrente (suppongo) e nel secondo caso, la funzione viene chiamata con parametri passati attraverso lo stack (suppongo). Ma ai fini dell'ottimizzazione, il compilatore può effettivamente implementare anche la seconda variante attraverso la sostituzione. È così? Non lo so. Ecco perché ho chiesto.

Sono i Metakvot che devono essere torturati. Ma la mia opinione coincide con la tua (a causa dell'ottimizzazione, il risultato potrebbe essere diverso).
 

L'oggetto ellisse viene evidenziato con il mouse solo se si clicca sui punti di ancoraggio.

È un bug o una caratteristica? È implementato in modo molto scomodo.

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Способы привязки объектов - Документация по MQL5
 
La scala verticale, se impostata manualmente, non viene ricordata al riavvio. Anche una seccatura.
 
MetaDriver:

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

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

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

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

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

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

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

  t.setDataElement(i, i*i);

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

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

6. Я плакаль.


e(array, i, j, value); Questo migliorerà anche la leggibilità. E anche il debug diventerà molto più facile. Merda. Ugh...

Beh, un setter ha il vantaggio di poter fare qualcosa di più di una semplice equazione.

Per esempio, si possono registrare informazioni, convertire dati (se parliamo di stringhe o di dati più complessi), inviare messaggi ad altri oggetti se succede qualcosa di importante (come aggiornare i dati).

Come farà il vostro oggetto a sapere quando la data è cambiata? A quanto pare, si sta andando a memorizzare le citazioni...
Oh sì, questo è un falso problema, perché il vostro oggetto è più simile a una struct e non gestisce davvero nulla.
Tutto è fatto in un'altra classe spazzatura, che gestisce tutto o peggio ancora, tutto avviene in onStart(), onTick(), ... ! :)

Buona giornata

 
MetaDriver:

3. che ne dici di fare un normale indicizzatore? Maid è figo, ma queen è meglio.

Guarnizione Muti. Rispetto a un normale valore, tuttavia, sarà molto più costoso in termini di tempo. Ma avrà l'aspetto che vi serve.

______

Ah, diavolo no. Allora avete bisogno di un sovraccarico dell'operatore di tipo fantasma. Peccato.

 
speedy:

Beh, il vantaggio del setter è che si può fare qualcosa di più di una semplice equazione.

Per esempio, si possono registrare informazioni, convertire dati (se parliamo di stringhe o di dati più complessi), inviare messaggi ad altri oggetti se succede qualcosa di importante (come aggiornare i dati).

Come farà il vostro oggetto a sapere quando la data è cambiata? A quanto pare, si sta andando a memorizzare le citazioni...
Oh sì, è un falso problema, perché il vostro oggetto è più simile a una struct e non controlla realmente nulla.
Tutto è fatto in un'altra classe spazzatura, che gestisce tutto o peggio ancora, tutto avviene in onStart(), onTick(), ... ! :)

Buona giornata

Il punto è che l'indicizzatore è uguale al setter in termini di caratteristiche . È implementata come una funzione, il cui contenuto può essere qualsiasi cosa (il caso tipico più semplice è il controllo dei limiti dell'array e la gestione di altri errori), e non sta semplicemente restituendo un riferimento a un elemento dell'array.

Buona giornata anche a te.

(Scusate il tono di ieri, ero un po' nervoso - problemi al lavoro. Tu non c'entri niente. Beh, a meno che tu non sia troppo categorico :)

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

Guarnizione Muti. Rispetto a un normale valore, tuttavia, sarà molto più costoso in termini di tempo. Ma avrà l'aspetto che vi serve.

______

Ah, diavolo no. Allora devi sovraccaricare l'operatore di conversione dei tipi. Peccato.

In realtà penso che lo faranno, c'è un difetto evidente con i ritorni di riferimento nella lingua.

Non è necessario fare variabili di riferimento, ma il ritorno di valori l dalle funzioni è sacro... :)

Non penso che non possa essere risolto in linea di principio - il linguaggio ha i soliti mql-arrays e si sentono molto bene su entrambi i lati dell'operatore di assegnazione. Ma sono classi C++ per implementazione!

Ecco un altro esempio della stessa serie: questo codice si compila ma non funziona.

#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));
     }
  }

Il mio punto non è che non dovrebbero compilare - il mio punto è che dovrebbero funzionare. :)

 
MetaDriver:

...
Non sto dicendo che non dovrebbe compilare, sto dicendo che dovrebbe funzionare... :)

Sì, hai ragione, è un errore del compilatore, lo sistemeremo.
 

MQL5 ha una meravigliosa costante IS_DEBUG_MODE che appartiene al gruppo Other constants. Possiamo aggiungere tale costante per un tester? Qualcosa come IS_TESTER_MODE...

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

MQL5 ha una meravigliosa costante IS_DEBUG_MODE che appartiene al gruppo Other constants. Possiamo aggiungere tale costante per un tester? Qualcosa come IS_TESTER_MODE...

Queste costanti non funzionerebbero?

ENUM_MQL5_INFO_INTEGER

Identificatore

Descrizione

Tipo di proprietà

MQL5_PROGRAMMA_TIPO

Tipo di programma mql5

ENUM_PROGRAMMA_TIPO

MQL5_DLLS_ALLOWED

Permesso di usare la DLL per il programma corrente in esecuzione

bool

MQL5_TRADE_ALLOWED

Permessodi commerciare per questo programma in corso

bool

MQL5_DEBUGGING

Segno di un programma in esecuzione che lavora in modalità debug

bool

MQL5_TESTING

Segno dell'esecuzione di un programma nel tester

bool

OTTIMIZZAZIONE MQL5

Segno dell'esecuzione di un programma durante l'ottimizzazione

bool

MQL5_VISUAL_MODE

Segno dell'esecuzione di un programma in modalità di test visivo

bool