MQL5冒號(:)和雙冒號(::)的用法
冒號(:)
假設(shè)操作符?:
三進制操作符一般形式如下:
對于第一個操作-"expression1"-任何表達式在布爾型中值都可以用。如果結(jié)果是true,那么第二個操作的操作符,例如 "expression2",就被執(zhí)行。
如果第一操作是false,第三操作-"expression3"-就被執(zhí)行。第二和第三操作,例如 "expression2"和"expression3"應(yīng)該返回第一類型值,不應(yīng)該是空類型。執(zhí)行假設(shè)操作符的結(jié)果就是expression2的結(jié)果或者expression3的結(jié)果,都取決于 expression1。
輸入等同于如下:
?
操作符使用限制
基于"expression1"值,操作符必須返回兩個值中的一個 - 或者"expression2"或者"expression3"。對這些表達式有幾個限制:
不要混淆 簡單類型 或 枚舉類型 的用戶定義類型。 NULL 可能被用于指針.
如果值是簡單類型,操作符將會是最大類型(請見類型轉(zhuǎn)換 )。
如果一個值是枚舉類型而第二個值是數(shù)字類型,那么枚舉類型被整型所取代并實施第二個規(guī)則。
如果兩個值都是枚舉類型,它們的類型必須完全相同,并且操作符將是枚舉類型。
限制用戶定義類型(類或結(jié)構(gòu)):
類型必須完全相同或者一個應(yīng)該源自另一個。
如果類型不相同(繼承類型),那么子類型會隱式轉(zhuǎn)換至父類型,例如操作符將成為父類型。.
不要混淆對象和指針 - 兩個表達式都是或是對象或是 指針。 NULL 不能用于指針。
注意
謹(jǐn)慎使用條件操作符當(dāng)做重載函數(shù)的論據(jù), 因為條件操作符的結(jié)果類型在程序編譯時定義。并且該類型定義為較大的"expression2"和"expression3"。
示例:
雙冒號(::)
范圍解析操作符 ( :: )
mql5中每個函數(shù)都有其執(zhí)行范圍。例如,Print()系統(tǒng)函數(shù)可以在全局范圍使用。Imported函數(shù)導(dǎo)入時使用。classes函數(shù)用在類的范圍。范圍解析操作語法如下:
如果沒有范圍名,就屬于全局范圍函數(shù)。如果沒有范圍解析操作,可以在最近范圍內(nèi)找到函數(shù)。如果本地范圍沒有函數(shù)n,需要全局搜尋函數(shù)。
范圍解析操作也用在 確定函數(shù)-類成員。
在一個程序使用不同執(zhí)行上下文的幾個同名函數(shù)可能會引起歧義。無明確范圍規(guī)范的函數(shù)調(diào)用的優(yōu)先順序如下:
類方法。如果在類中設(shè)置了無指定名稱的函數(shù),那么移到下一級別。
MQL5 函數(shù)。如果語言沒有這種函數(shù),那么移到下一級別。
用戶定義全局函數(shù)。如果沒有找到有指定名稱的函數(shù),那么移到下一級別。
導(dǎo)入函數(shù)。如果沒有發(fā)現(xiàn)有指定名稱的函數(shù),那么編譯器返回一個錯誤。
若要避免函數(shù)調(diào)用歧義,就要使用范圍解析操作,始終明確指定函數(shù)范圍。
?
示例: