有什么办法可以在Scala中重写这一行代码?

我尝试使用函数sum_重写Scala + Figaro的这一行,但是出现一些错误。

val sum = Container(vars:_*).reduce(_+_)

它使用reduce()方法计算总和。我想重写此行,但是由于Chain返回类型为[Double,Int],因此出现错误:

import com.cra.figaro.language._
import com.cra.figaro.library.atomic.continuous.Uniform
import com.cra.figaro.language.{Element,Chain,Apply}
import com.cra.figaro.library.collection.Container

object sum {  
  def sum_(arr: Int*) :Int={
    var i=0
    var sum: Int =0
    while (i < arr.length) {
      sum += arr(i)
      i += 1
    } 
    return sum     
  } 

  def fillarray(): Int = {
    scala.util.Random.nextInt(10) match{
      case 0 | 1 | 2 => 3
      case 3 | 4 | 5 | 6 => 4
      case _ => 5
    }
  }


  def main(args: Array[String]) {  
    val par = Array.fill(18)(fillarray())
    val skill = Uniform(0.0,8.0/13.0)
    val shots = Array.tabulate(18)((hole: Int) => Chain(skill,(s:Double) =>
                                                 Select(s/8.0 -> (par(hole)-2),s/2.0 -> (par(hole)-1),s -> par(hole),(4.0/5.0) * (1.0 - (13.0 * s)/8.0)-> (par(hole)+1),(1.0/5.0) * (1.0 - (13.0 * s)/8.0) -> (par(hole)+2)))) 

    val vars = for { i <- 0 until 18} yield shots(i)

    //this line I want to rewrite
    val sum1 = Container(vars:_*).reduce(_+_)

    //My idea was to implement in this way the line above
    val sum2 = sum_(vars)
  }
}
hygzp 回答:有什么办法可以在Scala中重写这一行代码?

如果要使用函数,可以这样做:

val sum2 = sum_(vars.map(chain => chain.generateValue()):_*)

val sum2 = sum_(vars.map(_.generateValue()):_*)

但是我建议更深入地研究您的库和功能范例。

本文链接:https://www.f2er.com/3122397.html

大家都在问