gpt4 book ai didi

scala - 将scala.math.Integral传递为隐式参数

转载 作者:行者123 更新时间:2023-12-03 14:33:57 24 4
gpt4 key购买 nike

我已经阅读了有关questionscala.math.Integral的答案,但是我不明白将Integral[T]作为隐式参数传递时会发生什么。 (我认为我通常理解隐式参数的概念)。

让我们考虑一下这个功能

import scala.math._

def foo[T](t: T)(implicit integral: Integral[T]) { println(integral) }


现在,我在REPL中调用 foo

scala> foo(0)  
scala.math.Numeric$IntIsIntegral$@581ea2
scala> foo(0L)
scala.math.Numeric$LongIsIntegral$@17fe89


integral参数如何变为 scala.math.Numeric$IntIsIntegralscala.math.Numeric$LongIsIntegral

最佳答案

参数为implicit,这意味着Scala编译器将查找是否可以在某个可以自动填充参数的地方找到隐式对象。

当您传递Int时,它将查找一个隐式对象,该对象是Integral[Int]并在scala.math.Numeric中找到它。您可以查看scala.math.Numeric的源代码,在其中:

object Numeric {
// ...

trait IntIsIntegral extends Integral[Int] {
// ...
}

// This is the implicit object that the compiler finds
implicit object IntIsIntegral extends IntIsIntegral with Ordering.IntOrdering
}


同样, Long有一个不同的隐式对象,其工作方式相同。

关于scala - 将scala.math.Integral传递为隐式参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5512397/

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