首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使scalaz.Tagged与类类基元属性一起工作?

如何使scalaz.Tagged与类类基元属性一起工作?
EN

Stack Overflow用户
提问于 2014-03-05 09:55:02
回答 1查看 133关注 0票数 3

请考虑以下示例:

代码语言:javascript
复制
import scalaz._

object TaggedExample {
  sealed trait Test

  def Test[A](a: A): A @@ Test = Tag[A, Test](a)
}

case class TaggedAttribute(l: Long @@ TaggedExample.Test)

它将无法按照下一个原因进行编译:

代码语言:javascript
复制
scalac: type mismatch;
 found   : Double
 required: AnyRef
Note: an implicit exists from scala.Double => java.lang.Double, but
methods inherited from Object are rendered ambiguous.  This is to avoid
a blanket implicit which would convert any scala.Double to any AnyRef.
You may wish to use a type ascription: `x: java.lang.Double`.

据我理解,发生这种情况的原因是类编译器代码生成中的一些细节(因为简单的def test(l: Long @@ TaggedExample.Test) = l编译得很好)。

如果我们将案例类定义更改为

代码语言:javascript
复制
case class TaggedAttribute(l: java.lang.Long @@ TaggedExample.Test)

汇编将取得成功。

问题是:是否有一种方法可以避免scalac错误而不将l类型更改为java.lang.Long (反过来,java.lang.Long将允许l成为null等)?

更新

在发帖后立即找到这个标记类型:类型错配问题和答案,但仍然:也许有一种方法可以避免使用java.lang.*框类型。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-05 12:04:31

知虫:使用标记类型和case类时出现编译器错误

解决方案:使用框类型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22194209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档