初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1334

 
Artyom Trishkin:
是Alexey在我给的代码中重做了一些东西。或者我低估了它--我是 "跪着 "写的,作为一个简单的例子来澄清我已经不记得的东西。

也许阿列克谢可以告诉我们)。

 
Valeriy Yastremskiy:

循环的迭代不会结束,也不会开始新的循环,而是会进入下一个If。逻辑会改变。

不,那里的条件最初是这样设置的:如果指针创建成功,那么就把它添加到列表中。曲线括号是封闭的,如果发生故障,加法将不会被执行。继续运算符 的逻辑有点不同,但结果是一样的。
 

Artyom Trishkin:
Это Алексей что-то переделывал в том коде, который я давал. А может и я недоглядел - писал "на коленке" в качестве простого примера для пояснения уже не помню чего.

//+------------------------------------------------------------------+
//| CNewBar Time Возвращает время нулевого бара                      |
//+------------------------------------------------------------------+
datetime CNewBar::Time(void)
  {
   datetime array[1], ret;
   ret = CopyTime(this.m_symbol, this.m_timeframe, 0, 1, array) == 1 ? array[0] : 0;
   return(array[0]);
 }
//+------------------------------------------------------------------+
//| CNewBar IsNewBar Основная функция класса                         |
//+------------------------------------------------------------------+
bool CNewBar::IsNewBar(void)
  {
   datetime tm = this.Time();
   if(tm == 0)
      return false;
   if(tm != this.m_time)
     {
      this.m_time = tm;
      return true;
     }
   return false;
  }


Artem,为什么在这里使用this关键字? 没有它,方法将与类成员 一起工作。

 
Mikhail Tkachev:

阿列克谢,感谢你如此详细的回答。
在给定的代码片段中,ret变量的目的并不清楚...
如果方法返回数组[0],为什么还要计算呢?
P.S.
为什么在类方法 中使用这个?我们正在与这个特殊阶层的成员合作...


  1. 由于函数CopyTime 返回一个值,让它返回到一个变量中,这不会使事情变得更糟......在调试的情况下,你可以检查你得到的东西。
  2. 这是由Artyom写的。显然,这是个人的偏好。有些人想写就写,不想写就不写:。
ps;我现在才注意到ret datetime变量的类型...当然应该是int类型。哦,好吧,我也要解决这个问题......。
 
Alexey Viktorov:
  1. 由于CopyTime函数 返回的是一个值,让它返回到一个变量,不会让它变得更糟......在调试的情况下,你可以检查你得到的东西。
  2. 这是由Artyom写的。显然,这是个人的偏好。有些人,这是必要的--没有必要写:。

1.这里的CopyTime函数 是干什么用的?

2.也许Artem会回答这个问题--它是个人偏好还是有必要?

 
Mikhail Tkachev:

1.CopyTime函数 的作用是什么?

2.也许Artem会回答这个问题 - 这是个人喜好还是有必要?

不喜欢CopyTime(),用iTime()代替。这没有什么区别,主要是为了获得当前条的时间。

在我的脑子里,我依稀记得它是什么时候写的。我想我也问过这个问题......如果我没有弄错的话,这可以确保引用的只是本地方法,以防其他类中有类似的方法。当然,阿尔乔姆也会做出澄清。

 
Alexey Viktorov:
不,那里的条件最初是这样设置的,如果指针创建成功,就把它添加到列表中。曲线括号是封闭的,如果出现故障,加法将不会被执行。继续运算符 的逻辑有点不同,但结果是一样的。

是的,结果是一样的,内部是不同的。我认为用延续的方式更快,虽然它的颜色和逻辑....。

 
Mikhail Tkachev:


Artem,为什么在这里使用这个关键字 呢? 因为即使没有它,方法也会与类成员 一起工作......

他们会。我使用它是因为我希望他们这样做 :)它明确指出了哪些类方法被使用。

如果你有两个类,一个是父类,一个是子类,你有两个名字相同的方法,但由于某种原因它们不是虚拟的,你必须明确指定使用哪一个。

假设父类是CParent,继承类是CInherited,它们都有Method()方法

在这种情况下,如果我们调用一个CParent类的方法Method(),它将明确地调用CParent类的方法--这里不需要这样做。我们可以在有或没有它的情况下调用该方法。

如果我们在一个继承的CInherited类中调用 Method() 方法,该类的 方法也会被调用,因为我们首先寻找属于我们调用的类的方法

如果我们在一个CInherited类中调用 CParent::Method() 这样调用 的就是 父类的 方法 ,因为我们通过上下文解析操作符明确指定了属于父类的方法

但是,我仍然会把方法称为 方法()在一个继承的CInherited 类中用this--以确保这个(this == "this")继承的类会被调用

使用这个还有其他解释。也许对OOP更有经验的人可以告诉我们。

 
Valeriy Yastremskiy:

是的,结果是一样的,内部是不同的。我认为用延续的方式更快,虽然它的颜色和逻辑....。

不应该有任何区别。对我来说,它只是看起来更漂亮--少了括号和缩进。

 
Alexey Viktorov:
  1. 由于CopyTime函数 返回的是一个值,让它返回到一个变量,不会让它变得更糟......在调试的情况下,你可以检查你得到的东西。
  2. 这是由Artyom写的。显然,这是个人的偏好。有些人写的,我不需要:。
ps;我现在才注意到ret datetime变量的类型...当然应该是int类型。但不要紧,我也要把它修好......

嗯,是的,我是那些 "有些人 "之一,特别是,当我从类中调用标准函数时,我总是指定全局环境。只是因为我可以想到在这个类中写一个与标准函数同名的方法--这样我就不会忘记它的作用。这就是::对于调用标准函数的作用,而这对于调用我的同名方法的作用。