Scala标签类型

时间:2014-03-02 16:54:25

标签: scala sbt

使用:Scala 2.10.3

尝试编译以下内容会出错。如果我删除了case-class,那么它就会编译。

关于双重解决方案的任何想法?

object DomainTypes {
type Tagged[T] = { type Tag = T }
trait DeviceIdTag
type DeviceId = Int with Tagged[DeviceIdTag]

implicit class TaggedInt(val data: Int) extends AnyVal {

 def deviceId = {
  require(data >= 1)
  data.asInstanceOf[DeviceId]
}
}
}

 case class DeviceIdHolder(odeviceId:DeviceId)
  

[错误]类型不匹配;   [错误]发现:双倍   [错误]要求:AnyRef   [错误]注意:来自scala.Double =>的隐含存在java.lang.Double,但是   从Object继承的[error]方法呈现模糊不清。这是为了避免   [error]一个毯子隐式,它会将任何scala.Double转换为任何AnyRef。   [错误]您可能希望使用类型归属:x: java.lang.Double。   [错误]发现一个错误   [error](编译:编译)编译失败   [错误]总时间:0秒,2014年3月2日上午11:47:01完成

如果用String替换INT,那么它就会编译,所以我认为本身没有任何结构上的错误。

1 个答案:

答案 0 :(得分:1)

正确答案可在此处找到:https://stackoverflow.com/a/21285738/386159

理想情况下,编辑会将此标记为重复,并指向我已链接的问题。