关于 scala.math.Integral 的问题
mkNumericOps 和 mkOrderingOps
的作用是什么rel="nofollow">scala.math.Integral 做什么以及我们如何使用它们?
据我所知,函数和对象方法可以被声明为隐式并用于隐式转换。但是我不明白为什么特征方法被声明为隐式
。
顺便说一句,类方法也可以被声明为隐式
吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先,让我们看看它们的声明:
它们是隐式的,这意味着它们的目标是提供一些自动值或转换。请注意,它们都从
T
转换为其他类型,其中T
是特征的类型参数:Integral[T]
。因此,如果您有
Integral[Int]
,那么mkNumericOps
将为您提供从Int
到IntegralOps
的自动转换。这意味着您将能够在Int
(或任何类型)上调用来自
IntegralOps
或Ops
的方法。积分)。现在,让我们看看这些方法是什么:
这些方法来自
IntegralOps
,它扩展了Ops
。关于它们的一个有趣的事情是,它们中的许多已经在Int
上定义了!那么,如何以及为何使用它们呢?这里有一个例子:因此,给定任何类型
T
,其中有一个隐式可用的Integral[T]
,您可以将该类型的列表传递给sum.
另一方面,如果我将方法专门用于
Int
类型,那么我可以在不使用Integral
的情况下编写它。另一方面,我无法编写适用于Int
和Long
以及BigInt
的东西,因为它们不共享共同点定义方法+
的祖先(更不用说“零”了)。上面的
foldLeft
实际上可以翻译为:First, let's see their declaration:
The fact that they are implicit means their goal is to provide some automatic value or conversion. Note that they both convert from
T
to some other type, whereT
is the type parameter of the trait:Integral[T]
.So, if you have
Integral[Int]
, thenmkNumericOps
will give you an automatic conversion fromInt
toIntegralOps
. That means you'll be able to call methods fromIntegralOps
orOps
on anInt
(or whatever it is the type of yourIntegral
).Now, let's see what methods are these:
These are from
IntegralOps
, which extendsOps
. An interesting thing about them is that many of them are already defined onInt
! So, how and why one would use them? Here's an example:So, given any type
T
for which there's anIntegral[T]
implicitly available, you can pass a list of that type tosum
.If, on the other hand, I made my method specific for the type
Int
, I could write it withoutIntegral
. On the other hand, I can't write something that will work for bothInt
andLong
andBigInt
, because they do not share a common ancestor defining the method+
(much less a `zero´).The
foldLeft
above is effectively translated as this: