我认为这应该是直截了当的:
import spire.math.Rational
val seq = Vector(Rational(1, 4), Rational(3, 4))
val sum = seq.sum // missing: scala.Numeric
val prod = seq.product // missing: scala.Numeric
我想这只是将正确的东西带入隐含范围的问题。但是我要导入什么?
我可以看到,为了获得RationalIsNumeric
,我必须做这样的事情:
import spire.math.Numeric._
implicit val err = new ApproximationContext(Rational(1, 192))
implicit val num = RationalIsNumeric
但这只给了我一个spire.math.Numeric
。所以我另外尝试了这个:
import spire.math.compat._
但没有运气......
答案 0 :(得分:8)
所需要的只是spire.math.compat.numeric[Rational]
的证据:
import spire.math._
val seq = Vector(Rational(1, 4), Rational(3, 4))
implicit val num = compat.numeric[Rational] // !
seq.sum // --> 1/1
seq.product // --> 3/16
答案 1 :(得分:7)
值得注意的是,Spire提供了自己的sum
和product
版本,并称之为qsum
和qproduct
:
import spire.implicits._
import spire.math._
Vector(Rational(1,3), Rational(1,2)).qsum // 5/6
Spire使用q
为其所有集合方法添加前缀,以避免与Scala的内置方法冲突。这是一个(可能不完整)列表:
qsum
qproduct
qnorm
qmin
qmax
qmean
qsorted
qsortedBy
qsortedWith
qselected
qshuffled
qsampled
qchoose
对不起,我来晚了一点,我是StackOverflow的新手。