1
我嘗試使用scalaz中的標記類型來加強類型安全性。標籤類型:類型不匹配
我遇到了一個警告和一個我不明白的錯誤。
你能解釋我兩個嗎?
這裏是控制檯輸出:
scala> sealed trait PostId
defined trait PostId
scala> def PostId(l: Long) : Long @@ PostId = Tag[Long, PostId](l)
PostId: (l: Long)[email protected]@[Long,PostId]
warning: previously defined trait PostId is not a companion to method PostId.
Companions must be defined together; you may wish to use :paste mode for this.
scala> case class Post(id: PostId)
defined class Post
scala> Post(PostId(2l))
<console>:26: error: type mismatch;
found : [email protected]@[Long,PostId]
(which expands to) Long with AnyRef{type Tag = PostId}
required: PostId
Post(PostId(2l))
我的不好,應該是'Long @@ PostIdTag',而不是'Long @@ PostId'。我更新了我的答案。 –
一個新的錯誤:scala> case class Post(id:PostId) error:type mismatch; 找到的:任何 必需:AnyRef 注意:任何不會隱式轉換爲AnyRef。您可以安全地使用 模式匹配'x:AnyRef'或強制執行'x.asInstanceOf [AnyRef]'來執行此操作。 –