gpt4 book ai didi

scala - 为什么 foo[F[_], A](ff : F[A]) accept foo(1)?

转载 作者:行者123 更新时间:2023-12-04 08:42:17 26 4
gpt4 key购买 nike

为什么调用foo(1)如下所述在我的 Scala 2.11.7 repl 中工作?

scala> def foo[F[_], A](fa: F[A]) = null
foo: [F[_], A](fa: F[A])Null

scala> foo(List(1))
res0: Null = null

scala> foo(1)
res1: Null = null

我对 foo(1) 的调用中的参数不是类型构造函数,为什么 Scala repl 接受它?

最佳答案

foo(1)有效,因为存在隐式转换 int2Integer java.lang.Integer

foo(int2Integer(1))

IntegerComparable[Integer] 的一个实例
public final class Integer extends Number implements Comparable<Integer>

我们在哪里看到 Comparable确实是一个类型构造函数。例如,我们可以 reproduce同样的行为
def foo[F[_], A](fa: F[A]) = 42
trait Bar // not a type constructor
implicit def barToComparable(b: Bar): Comparable[Int] = (o: Int) => -1
val bar = new Bar {}
foo(bar) // OK due to implicit conversion barToComparable

关于scala - 为什么 foo[F[_], A](ff : F[A]) accept foo(1)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34838636/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com