如何在MQL4/MQL5中获得枚举和项目的长度? - 页 2

 
Alain Verleyen:
长度从来都是未知的,这个话题只是由一个糟糕的设计造成的。
这个需求来自于一个AutoTester项目。
在许多指标/EA中,输入参数 包含自定义枚举,我们需要弄清枚举中的项目(和相对值)。
所以,不要说 "设计不好"。废话...废话...。
 
Xiangdong Guo:
这个需求来自于一个AutoTester项目。
在许多指标/EA中,输入参数包含自定义枚举,我们需要弄清枚举中的项目(和相对值)。
所以,不要说 "设计不好"。废话......废话......。
当然,这是个糟糕的设计。但这对我来说不是一个问题。
 
Marco vd Heijden:
你说的 "枚举的长度 "是什么意思?
enum fruit
  {
   APPLE=0,//APPLE
   BANANA=1,//BANANA
   GRAPE=2,//GRAPE
   ORANGE=3,//ORANGE
   CARROT=4,//CARROT
  };
  
sinput fruit type;//PICK A FRUIT 

也许胡萝卜不是一种水果......我还是不明白郭向东 说的'枚举的长度'是什么意思

每个选项字符串名称中的字母数?

可能有多少个选项?

选项的数值?

不仅设计不好,而且也不太清楚他的意思。

 
Marco vd Heijden:
值的数量,所以在你的水果的例子中是5。
 
Alain Verleyen:
值的数量,所以在你的水果的例子中是5。

我同意它是静态的,它不可能是可变的,所以将总是一个已知的固定值开始。

然而,如果郭向东 ,测试不是他自己设计或编写的指标,并想知道或自动检测输入参数......

不知道知道知道可用选项的数量会有什么帮助,也许他想交叉测试所有可用的选项,只是在寻找要运行的测试数量?

我将扫描假定的选项来解决这些值,一旦你试图转换出可用选项的边界,它将产生不能转换枚举的错误,因为它不存在。

 
Marco vd Heijden:

MT4/MT5使用C++/C#函数 从枚举中检索项目。但MetaQuotes并没有将这些函数移植到MQL4/MQL5。哼...哼...

enum DURATION_INTERVALS  // Enumeration of named constants
   {
    month=1,     // Interval of one month
    two_months,  // Two months
    quarter,     // Three months - quarter
    halfyear=6,  // Half a year
    year=12,     // Year - 12 months
   };

input DURATION_INTERVALS HistoryDuration = month;

 
Xiangdong Guo:

MT4/MT5使用C++/C#函数从枚举中检索项目。但MetaQuotes并没有将这些函数移植到MQL4/MQL5。哼...哼...

哪个函数?问题是什么?你为什么要循环浏览枚举的项目?
 
Alain Verleyen:
哪个函数?问题是什么?为什么你想在枚举的项目中循环?

如果有人想/需要做一些MQL不可能做到的事情,这并不一定意味着 "设计不好"。

对于话题的发起人来说:在当前版本的MQL中,不可能做到你想要的事情。

唯一的方法是将所有的项目复制到一个数组中,并使用该数组进行循环。但这只有在你能修改代码的时候才可以做到。

 
Andrey Barinov:

如果有人想/需要做一些MQL不可能做到的事情,这并不一定意味着 "设计不好"。

对于话题的发起人来说:在当前版本的MQL中,不可能做到你想要的事情。

唯一的方法是将所有的项目复制到一个数组中,并使用该数组进行循环。但是,这只有在你能修改代码的情况下才能做到。

使用一个枚举而不是一个数组是一个糟糕的设计。不是吗?

 
Alain Verleyen:

使用枚举而不是数组是一个糟糕的设计。不是吗?

不,使用数组而不是枚举是一个糟糕的设计。

举个例子。想象一下,你有一个字符串值。任务是找出这个字符串是否等于/包含其中的一个枚举项的名称(EnumToString())。

你将如何解决这个问题?