一个新来的人问道! - 页 26

 
Alexander Bereznyak:

这些是你的话,没有警告,但真的有

你生活在什么世界里,你抽什么烟,分享一下

所以,你这么大胆地为我宣称我的代码,你看不到它?你把蘑菇弄错了吗?
 
Dmitry Fedoseev:
所以,你如此大胆地为我断言我的代码,而你并没有看到?你是不是搞错了蘑菇?

我知道了,不是傻瓜,你有一个没有警告的特殊编译器,特别是个人从MQ

PS:我也想要一个,把它给我。

 
Михаил:

你给的代码根本不正确!你的代码是什么?

它应该是这样的。

ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));

错了,因为这样就有了一个比较。

if(type==(long)POSITION_TYPE_BUY


不,不是的。

这与它没有关系。

编码机只是反应过度或从某处复制了类型转换


事实上

编码

    long type=PositionGetInteger(POSITION_TYPE);
    if (type==POSITION_TYPE_BUY) return;

并不产生任何错误或警告。

MQL不要求明确的转换


PS。在你开始争论之前,先测试你的假设。

 

一个非常糟糕的例子,你在比较中失误了,然后就会遇到错误。

 
o_O:

PS。在你开始争论之前,先测试你的假设。

在提出建议时要考虑到后果
 
o_O:


不,你不是。

这与它没有关系。

编码员只是反应过度或从其他地方抄袭


事实上

编码

并不产生任何错误或警告。

MQL不需要明确的转换


PS。在你开始争论之前,先测试你的假设。

o_o!

Right - wrong....

我得到的印象是,你不读别人写的东西!这是不可能的。

根据编程规则。

接受的函数变量的类型必须与该函数的返回值相同!

这就是了!

这个猜测就到此为止。

你为什么不这样写呢?

int type=PositionGetInteger(POSITION_TYPE);

因为你知道,这个函数总是返回LONG。

而参考文献明确指出,PositionGetInteger()函数的参数POSITION_TYPE返回的值

是ENUM_POSITION_TYPE,不是LONG。

如果你想练习类型铸造,就这样写吧。

int type = int(PositionGetInteger(POSITION_TYPE));

if (type==POSITION_TYPE_BUY) return;

编译器不给你出错,并不意味着你写得正确!你要知道,你写的是什么?

它表明了编译器的 "自由意志",仅此而已!(它允许你比较LONG和INTEGER)。

这是处理这种情况的正确方法。

 ENUM_POSITION_TYPE pos_type = ENUM_POSITION_TYPE(PositionGetInteger(POSITION_TYPE));
 
Alexander Bereznyak:

一个非常糟糕的例子,你错过了比较,然后你会得到一个错误。

你是否在某处看到关于进一步与类型转换的内容? 不要通过提及不同的讨论主题来证明你的论点。

这只是关于比较,只有在这种情况下,长是枚举。


你已经进入了思想的丛林,尽管问题是直接的,这是由整数回答的。

Nextor257:

请指教,我不明白这是一种什么样的比较?

如果(type==(long)POSITION_TYPE_BUY)

为什么(long)前面会有POSITION_TYPE_BUY ?


德米特里-费多塞耶夫

这是对变量类型的即时改变。

 
Dmitry Fedoseev:

long和lon代替ENUM_POSITION_TYPEENUM_POSITION_TYPE

8个字符(你可以闭着眼睛打),而不是36个字符(而且是大写字母)!除此以外,还有各种没有意义的信息。这不是一种好的编程风格--不必要的写作和多余的信息。

在这种情况下,米哈伊尔是绝对正确的(尽管我对米哈伊尔的编程风格非常反感)。

而且,这不是关于潜在的警告,更不是关于字符的数量,而是关于严格的打字ENUM_POSITION_TYPE 枚举是一个独特的数据类型。它是ENUM_POSITION_TYPE,不是long或int。你必须把它作为ENUM_POSITION_TYPE使用,而不能以其他方式使用。而且,如果你打得很长,自动完成功能会从第三个字符开始,完全没有问题。而问题在于使用long,因为它几乎可以是任何东西,而ENUM_POSITION_TYPE则不是。

o_O:

MQL不要求明确的转换

起初我写的是确实如此,但后来我看到 "比较 "一词。实际上,在比较中不需要显式转换,因为MQL是隐式转换。而且最好根本不做,因为其结果往往是不确定的。但是在其他正常的严格类型化的语言中,总是需要明确的类型转换。

P.S. 这一次,迈克尔给出了一个合格的答案,但人们也开始像往常一样在这里抨击他。而且是徒劳的,因为在这种情况下他是对的。