Scala,类型不匹配;found:(Double,Option[String])⇒需要双精度:((双精度,选项[Str



创建匹配用例的代码

object IrisSepalLengthOption {
def sepallen(sep_len: Double,species: Option[String]):Double = species 
match{
case Some("Iris-setosa") => sep_len * 2
case Some("Iris-virginica") => sep_len * 3
case Some("Iris-versicolor") => sep_len * 4
case _ => 0.0
}

从csv文件读取数据以解析数据并应用上述功能的主要方法

def main(args: Array[String]){
println(sepallen(4.0,Some("Iris-setosa"))) // This one works fine

val source = Source.fromFile("E:\MI_Dataset\Iris.csv").getLines().drop(1).toArray
val sepcol = source.map { line =>
val str = line.split(",")
val sep_len = str(1).toDouble
val speceies = str(5).toString
(sep_len,Option(speceies))
}
sepcol.take(5).foreach(println)  //This one prints the output correctly
val p = sepcol.map(_._1)
val s = sepcol.map(_._2)
val result = sepcol.foreach(sepallen) //Here i am getting the mismatch error
}
} 

当我调用函数时,我得到了类型不匹配错误,如(type mismatch; found : (Double, Option[String]) ⇒ Double required: ((Double, Option[String])) ⇒ ?

如何解决这个问题。如果有人澄清这一点,这将对我有很大帮助

样本数据如下:

  • 1.5.1,3.5,1.4,0.2,鸢尾
  • 2,4.9,3,1.4,0.2,鸢尾
  • 3,4.7,3.2,1.3,0.2,鸢尾
  • 4,4.6,3.1,1.5,0.2,鸢尾
  • 5,5,3.6,1.4,0.2,鸢尾
  • 64,6.1,2.9,4.7,1.4,彩色虹膜
  • 65,5.6,2.9,3.6,1.3,彩色虹膜66,6.7,3.1,4.4,1.4,彩色虹膜115,5.8,2.8,5.1,2.4,Iris virginica116,6.4,3.2,5.3,2.3,Iris virginica117,6.5,3,5.5,1.8,Iris virginica118,7.7,3.8,6.7,2.2,Iris virginica

注意预期类型和实际类型之间的细微差异,最重要的是括号:

type mismatch; found : (Double, Option[String]) ⇒ Double required: ((Double, Option[String])) ⇒ ?

sepallen函数需要两个参数,DoubleOption[String],但语法sepcol.foreach(func)需要func是单个参数的函数:Tuple(其元素是DoubleOption[String](

您可以通过分解元组将其提供给sepallen来修复它,例如:

val result = sepcol.foreach{ case (sep_len, species) => sepallen(sep_len, species) }

最新更新