用于创建区分大小写的代码
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])) ⇒ ?
的类型不匹配错误
如何解决这个问题。如果有人澄清这对我很有帮助
示例数据如下:
答案 0 :(得分:1)
请注意预期类型和实际类型之间的细微差别,最重要的是括号:
type mismatch; found : (Double, Option[String]) ⇒ Double required: ((Double, Option[String])) ⇒ ?
sepallen
函数需要两个参数,分别为Double
和Option[String]
,但是语法sepcol.foreach(func)
期望func
是单个函数参数:Tuple
(其元素是Double
和Option[String]
)
您可以通过展开元组来将其提供给sepallen
来修复它,例如:
val result = sepcol.foreach{ case (sep_len, species) => sepallen(sep_len, species) }