【问题标题】:Seq.range[Double] : Could not find implicit value for evidence parameterSeq.range[Double]:找不到证据参数的隐含值
【发布时间】:2018-06-29 14:07:58
【问题描述】:
Seq.range[Double](.0, 1.0 + step, step).foreach(current_degree_of_freedom => { ... }

(与stepDouble)。

完整的错误是:

错误:(39, 26) 找不到证据参数的隐含值 类型积分[双] Seq.range[Double](.0, 1.0 + step, step).foreach(current_degree_of_freedom => {

我已经阅读了 ScalaDoc (http://www.scala-lang.org/api/2.12.3/scala/collection/Seq$.html#rangeT(implicitvidence$2:Integral[T]):CC[T]),问题来自第二个 curryied 参数列表。

但我不明白错误...我认为可能是由于Seq.range之后没有[Double],所以我写了它但它没有解决问题...

谁能给我解释一下这个问题?

【问题讨论】:

    标签: scala


    【解决方案1】:

    当您将Double 值传递给range 方法时,编译器将查找隐式Integral[Double]。显然你没有提供这个隐式值,因此错误。为了让编译器满意,添加一个隐式的Integral[Double]

    implicit val integralD = scala.math.Numeric.DoubleAsIfIntegral
    
    val range = Seq.range(0.0, 1.2, 0.2)
    // List(0.0, 0.2, 0.4, 0.6000000000000001, 0.8, 1.0)
    

    【讨论】:

    • 谢谢!可以向我解释什么是 Integral 吗?是数学积分吗?顺便说一句,我为什么要添加/提供Integral[Double] 类型的隐式值,如果它被审查为...“隐式”?
    【解决方案2】:

    您需要序列吗? Scala 具有非常丰富的类型结构。

    您的类型可能是 NumericRange,并且有一种自然的方法可以生成您想要使用的数字序列。检查这个的结果类型

    val mynumrange = 0.0 to 1.0 by step
    

    【讨论】:

    • .1而不是0正常吗?
    • 您的意思是浮点数表示可以理解哪些文字?是的,您可以使用 0.1 或 .1 。它记录在语言规范的词汇语法中。请参阅scala-lang.org/files/archive/spec/2.11/… 中的示例
    • 哦,我现在明白了,这是一个错字,使用 0 而不是 0.1 作为起点。一旦我知道如何编辑帖子,我会更正它。感谢您的评论
    猜你喜欢
    • 1970-01-01
    • 2017-04-26
    • 2019-03-23
    • 2013-09-04
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多