Scala错误:扩展功能缺少参数类型

特拉维斯公园

我正在尝试为Scala编写查询库。这是到目前为止的代码:

class Query[TElement](source: Traversable[TElement]) {
    def join[TOther](other: Traversable[TOther]) = new {
        def on[TKey](keySelector1: TElement => TKey) = new {
            def equals(keySelector2: TOther => TKey) = new {
                def into[TResult](resultSelector: (TElement, TOther) => TResult): Query[TResult] = {
                    val map = source.map(e => (keySelector1(e), e)).toMap
                    val results = other
                        .map(e => (keySelector2(e), e))
                        .filter(p => map.contains(p._1))
                        .map(p => (map(p._1), p._2))
                        .map(p => resultSelector(p._1, p._2))
                    new Query[TResult](results)
                }
            }
        }
    }
}

object Query {
    def from[TElement](source: Traversable[TElement]): Query[TElement] = {
        new Query[TElement](source)
    }
}

...

val results = Query.from(users)
    .join(accounts).on(_.userId).equals(_.ownerUserId).into((_, _))

我去编译时出现以下错误:

error: missing parameter type for expanded function ((x$2) => x$2.ownerUserId)

我有些困惑,为什么我会在非泛型函数上收到此错误equals我认为,它的通用参数来自外部范围。我知道要解决它,我必须通过编写来明确说明参数类型是什么(a: Account) => a.ownerUserId但是,我试图使它成为一个非常流畅的库,这使它变得凌乱。

菊宿

问题很简单。equals继承自的现有方法存在歧义Any简单的例子:

scala> class X[A, B] { def equals(f: A => B) = f }
defined class X

scala> val x = new X[Int, String]
x: X[Int,String] = X@52d455b8

scala> x.equals((x: Int) => x.toString)
res0: Int => String = <function1>

scala> x.equals((x: String) => x.toString) // uh-oh
res1: Boolean = false

在上一个示例中可以看到,当传递了错误的函数类型时,编译器必须选择def equals(Any): Boolean当您不指定任何类型时,编译器必须推断一个类型,而在示例中是无法做到的。

只需将您的方法重命名为其他方法,问题就解决了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Scala缺少扩展功能的参数类型

来自分类Dev

扩展功能缺少类型参数

来自分类Dev

扩展功能缺少参数类型-它取决于什么?

来自分类Dev

Scala:缺少参数类型

来自分类Dev

Scala中的Iterable Trait方法缺少参数类型错误。

来自分类Dev

追踪“扩展函数缺少参数类型”

来自分类Dev

缺少 Scala df Iterator 上的参数类型

来自分类Dev

scala3扩展方法类型参数

来自分类Dev

Couchbase scala observable n1ql 查询结果缺少扩展函数的参数类型 ((x$12) => x$12.rows())

来自分类Dev

原始函数到char转换的扩展函数缺少参数类型

来自分类Dev

缺少用于 reduceLeft 的扩展函数的参数类型

来自分类Dev

类型擦除导致扩展功能的参数类型丢失

来自分类Dev

Scala 类型参数不符合错误

来自分类Dev

Scala-arm导入错误:方法资源缺少参数

来自分类Dev

宏拼接时出现“错误:缺少参数类型”

来自分类Dev

类型错误:removeDuplicates() 缺少 1 个必需的位置参数:“randList”

来自分类Dev

类型错误:insert() 缺少 1 个必需的位置参数:'chars'

来自分类Dev

类型错误:decorator() 缺少 1 个必需的位置参数:'func'

来自分类Dev

类型错误:缺少多个 .py 文件所需的位置参数

来自分类Dev

Python 3.6 类型错误:缺少 1 个必需的位置参数

来自分类Dev

类型错误:fit() 缺少 1 个必需的位置参数:'X'

来自分类Dev

类型错误:check() 缺少 1 个必需的位置参数:'self'

来自分类Dev

类型错误:GetSize() 缺少 1 个必需的位置参数:'self'

来自分类Dev

Scala-抽象基类中的参数类型,可以扩展

来自分类Dev

scala#扩展带有类型参数的贷款模式:问题

来自分类Dev

缺少参数类型

来自分类Dev

Scala类型错误-不接受任何类型参数,应为:1

来自分类Dev

Scala类型错误-不接受任何类型参数,应为:1

来自分类Dev

Scala:使用PartialFunction reify调用Scala宏时,“缺少参数类型”

Related 相关文章

  1. 1

    Scala缺少扩展功能的参数类型

  2. 2

    扩展功能缺少类型参数

  3. 3

    扩展功能缺少参数类型-它取决于什么?

  4. 4

    Scala:缺少参数类型

  5. 5

    Scala中的Iterable Trait方法缺少参数类型错误。

  6. 6

    追踪“扩展函数缺少参数类型”

  7. 7

    缺少 Scala df Iterator 上的参数类型

  8. 8

    scala3扩展方法类型参数

  9. 9

    Couchbase scala observable n1ql 查询结果缺少扩展函数的参数类型 ((x$12) => x$12.rows())

  10. 10

    原始函数到char转换的扩展函数缺少参数类型

  11. 11

    缺少用于 reduceLeft 的扩展函数的参数类型

  12. 12

    类型擦除导致扩展功能的参数类型丢失

  13. 13

    Scala 类型参数不符合错误

  14. 14

    Scala-arm导入错误:方法资源缺少参数

  15. 15

    宏拼接时出现“错误:缺少参数类型”

  16. 16

    类型错误:removeDuplicates() 缺少 1 个必需的位置参数:“randList”

  17. 17

    类型错误:insert() 缺少 1 个必需的位置参数:'chars'

  18. 18

    类型错误:decorator() 缺少 1 个必需的位置参数:'func'

  19. 19

    类型错误:缺少多个 .py 文件所需的位置参数

  20. 20

    Python 3.6 类型错误:缺少 1 个必需的位置参数

  21. 21

    类型错误:fit() 缺少 1 个必需的位置参数:'X'

  22. 22

    类型错误:check() 缺少 1 个必需的位置参数:'self'

  23. 23

    类型错误:GetSize() 缺少 1 个必需的位置参数:'self'

  24. 24

    Scala-抽象基类中的参数类型,可以扩展

  25. 25

    scala#扩展带有类型参数的贷款模式:问题

  26. 26

    缺少参数类型

  27. 27

    Scala类型错误-不接受任何类型参数,应为:1

  28. 28

    Scala类型错误-不接受任何类型参数,应为:1

  29. 29

    Scala:使用PartialFunction reify调用Scala宏时,“缺少参数类型”

热门标签

归档