2015-06-05 131 views
1

考慮下面的代碼片段:定義泛型函數類型

type 
    Base = object of RootObj 
    Consume*[T: Base] = proc(e: T): bool 

我想要定義來自基層,基層消費者幾種類型,就像這樣:

type 
    BaseOne = object of Base 
    ConsumeOne = Consume[BaseOne] 

現在,當我創建一個新的ConsumeOne

let co: ConsumeOne = proc(b: BaseOne): bool = false 

我得到以下編譯器錯誤:Error: type mismatch: got (proc (b: BaseOne): bool{.gcsafe, locks: 0.}) but expected 'ConsumeOne'

我在做什麼錯?

回答

3

的問題是類型參數目前不匹配亞型類型類的約束;我不知道這是一個錯誤還是故意的。現在,只需從類型參數T中刪除: Base約束。

+0

沒錯。我希望這能儘快解決 – Arrrrrrr

0

也許這將有助於提高消費gcsafe:

Consume*[T: Base] = proc(e: T): bool {.gcsafe.} 
+0

它不會改變一件事,我得到了同樣的錯誤。 – Arrrrrrr