错误、漏洞、问题 - 页 714

 
victorg:

宏和内联函数确实是不同的东西。但这不是我的意思。这里有一个例子,参数的值在编译时是未知的

在第一种情况下,代码必须粘贴到当前函数中(我想),在第二种情况下,函数被调用,参数 通过堆栈传递(我想)。但出于优化的目的,编译器实际上也可以通过替换来实现第二个变体。是这样吗 我不知道。这就是为什么我问。

必须要受折磨的是梅塔克沃特人。但我的观点与你不谋而合(因为优化,结果可能不同)。
 

椭圆对象只有在你点击锚点 时才会用鼠标突出显示。

这是一个错误还是一个特点?它的实施是非常不方便的。

Документация по 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相比,它在时间上将会更昂贵。但它将看起来正是你需要的方式。

______

啊,地狱没有。那么你就需要一个类型Ghost 运算符重载。遗憾的是。

 
speedy:

那么,setter的优势在于你可以做一些比简单的方程式更多的事情。

例如,你可以记录信息,转换数据(如果我们谈论的是字符串或更复杂的数据),在发生重要事情时向其他对象发送消息(如更新数据)。

你的对象如何知道日期已经改变?显然,你要存储报价...
哦,是的,这是一个错误的问题,因为你的对象更像是结构,并没有真正控制什么。
一切都在另一个垃圾类中完成,它处理一切,甚至更糟,一切都发生在onStart(), onTick(), ...!:)

祝你有个愉快的一天

关键是索引器在功能上与设置器 相同 它被实现为一个函数,其内容可以是任何东西(最简单的典型情况是数组的边界检查和处理其他错误),而且它不只是返回一个数组项 的引用。

你也有一个美好的一天。

(抱歉昨天的语气,我有点紧张--工作上的麻烦。你与此毫无关系。好吧,除非你太绝对化了 :)

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

垫片。然而,与正常的lvalue相比,它在时间上将会更昂贵。但它会以你需要的方式出现。

______

啊,地狱没有。那么你需要重载类型转换 操作符。太糟糕了。

事实上,我认为他们会这样做的。 在语言中,有一个明显的缺陷,即参考回报。

你不需要做引用变量,但从函数中返回的l值是神圣的...:)

我不认为这在原则上不能解决--语言有通常的mql-arrays,它们在赋值运算符的两边都感觉很好。但它们在实现上是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有一个奇妙的常数IS_DEBUG_MODE,属于其他常数组。我们可以为测试员添加这样的常量吗?类似于IS_TESTER_MODE...

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

MQL5有一个奇妙的常数IS_DEBUG_MODE,属于其他常数组。我们可以为测试员添加这样的常量吗?类似于IS_TESTER_MODE...

这些常数不就可以了吗?

enum_mql5_info_integer

识别器

描述

财产类型

mql5_program_type

mql5-程序的类型

enum_program_type

mql5_dlls_allowed

允许当前运行的程序中使用DLL。

bool

mql5_trade_allowed

允许该运行项目进行交易

bool

MQL5_DEBUGGING

一个运行中的程序在调试模式下工作的标志

bool

MQL5_TESTING

在测试器中运行一个程序的标志

bool

mql5_optimization

优化期间运行程序的标志

bool

mql5_visual_mode

在视觉测试模式下运行程序的标志

bool