当前位置: 首页 > 知识库问答 >
问题:

Scala--一个不可疑的隐式方法正在搞乱整个CanBuildFrom

经正祥
2023-03-14
trait DBO
trait BSONWriter[S]

trait HasWriter {
   implicit def writer[T <: BSONWriter[_ <: DBO]]: T
}

一切都很好!除了我将它混合到对象中之外,所有集合的map方法和其他隐式使用canbuildFrom的东西在所有这些对象及其伴随类中现在显示错误,并显示如下消息

  • 不明确的隐式值:trait保存[T<:reactiveMongo.bson.handlers.bsonWriter[_<:traits.dbo]]=>T类型的方法writer和对象缓冲区[A]=>scala.collection.generic.canBuildFrom[scala.collection.mutable.Buffer.coll,A,scala.collection.mutable.Buffer.coll,A,scala.collection.mutable.Buffer[A]]类型的方法canBuildFrom LebsonDocument},that]

现在我不明白,这是为什么?混淆的隐式方法的签名是不同的!我怎样才能防止这种情况呢?

共有1个答案

景恩
2023-03-14

我想一个简短的例子就能说明问题:

trait Foo

trait Implicits {
    implicit def b[T <: String]: T

    implicit def run = implicitly[Foo]
}

这是正确的编译--那么这是怎么回事呢?使用-xprint:typer:

implicit def run: foo.Foo = scala.this.Predef.implicitly[foo.Foo](Implicits.this.b[Nothing])

问题是nothing(以及其他类型,就编译器所知)都是foo<:stringb的类型多态性太强,因此它基本上匹配您要寻找的任何隐式。这就是您的示例中发生的事情:nothing既是t<:bsonwriter[_<:DBO]又是canbuildfrom[...]

trait HasWriter[T <: BSONWriter[_ <: DBO]] {
   implicit def writer: T
}
 类似资料:
  • 问题内容: 对我来说,到目前为止,关于1NF的最容易理解的描述是“主键是唯一标识每一行的一列(或一组列)”。在www.phlonx.com上,我了解到冗余意味着每个键的每一行不应超过1个值。大于1的值将是“多余的”。正确的? 尽管如此,我还是设法搞砸了很多次1 NF。我在这里为我的在线披萨店http://foo.com 披萨店 发布了一个问题 在这里我对第二范式感到困惑,只是注意到我在1 NF中开

  • 本文向大家介绍写个方法随机打乱一个数组相关面试题,主要包含被问及写个方法随机打乱一个数组时的应答技巧和注意事项,需要的朋友参考一下 两个思路 随机交换 打乱下标(慢了 300-1000 倍左右)

  • 下面包含我的controller类中的代码,我使用方法public String getRegistrationForm(Map model)返回一个带有spring表单的jsp-page,在这个方法中,我设置了UserTab.SetisMfAEnabled(new Boolean(true)),在提交表单时调用方法:public String registerUser(@modelAttribu

  • 问题内容: 在Bruce Eckel的“ Thinking In Java,第四版”的第428页(有关类型信息的章节)中,具有以下示例: 也许我有点累,但是我看不到add()方法中对add()的调用是如何工作的。我一直认为它应该有一个引用,或者是一个静态方法(并且我在ArrayList或List中找不到静态add())。我想念什么? 我只是为自己测试,发现这可行: 问题答案: Java为这样的方法

  • 如何定义具有多个隐式参数的函数。

  • 问题内容: 我问这个问题有点傻,但是从我读过的所有内容来看,这应该有效,但对我而言却无效。我只是想使用正则表达式匹配字符串中的整个单词。 因此,如果我试图在句子中找到单词“ the”,则对于“褐狐快速越过懒狗”应该返回true,而对于“褐狐快速越过懒狗”则返回false。 。 我已经试过了: 我也尝试过: 我也尝试过此正则表达式:“ \ bthe \ b” 而且它们总是返回false。我觉得我在这