MQL5冒号(:)和双冒号(::)的用法
冒号(:)
假设操作符?:
三进制操作符一般形式如下:
对于第一个操作-"expression1"-任何表达式在布尔型中值都可以用。如果结果是true,那么第二个操作的操作符,例如 "expression2",就被执行。
如果第一操作是false,第三操作-"expression3"-就被执行。第二和第三操作,例如 "expression2"和"expression3"应该返回第一类型值,不应该是空类型。执行假设操作符的结果就是expression2的结果或者expression3的结果,都取决于 expression1。
输入等同于如下:
操作符使用限制
基于"expression1"值,操作符必须返回两个值中的一个 - 或者"expression2"或者"expression3"。对这些表达式有几个限制:
不要混淆 简单类型 或 枚举类型 的用户定义类型。 NULL 可能被用于指针.
如果值是简单类型,操作符将会是最大类型(请见类型转换 )。
如果一个值是枚举类型而第二个值是数字类型,那么枚举类型被整型所取代并实施第二个规则。
如果两个值都是枚举类型,它们的类型必须完全相同,并且操作符将是枚举类型。
限制用户定义类型(类或结构):
类型必须完全相同或者一个应该源自另一个。
如果类型不相同(继承类型),那么子类型会隐式转换至父类型,例如操作符将成为父类型。.
不要混淆对象和指针 - 两个表达式都是或是对象或是 指针。 NULL 不能用于指针。
注意
谨慎使用条件操作符当做重载函数的论据, 因为条件操作符的结果类型在程序编译时定义。并且该类型定义为较大的"expression2"和"expression3"。
示例:
双冒号(::)
范围解析操作符 ( :: )
mql5中每个函数都有其执行范围。例如,Print()系统函数可以在全局范围使用。Imported函数导入时使用。classes函数用在类的范围。范围解析操作语法如下:
如果没有范围名,就属于全局范围函数。如果没有范围解析操作,可以在最近范围内找到函数。如果本地范围没有函数n,需要全局搜寻函数。
范围解析操作也用在 确定函数-类成员。
在一个程序使用不同执行上下文的几个同名函数可能会引起歧义。无明确范围规范的函数调用的优先顺序如下:
类方法。如果在类中设置了无指定名称的函数,那么移到下一级别。
MQL5 函数。如果语言没有这种函数,那么移到下一级别。
用户定义全局函数。如果没有找到有指定名称的函数,那么移到下一级别。
导入函数。如果没有发现有指定名称的函数,那么编译器返回一个错误。
若要避免函数调用歧义,就要使用范围解析操作,始终明确指定函数范围。
示例: