错误非法启动简单表达式

时间:2017-11-16 18:34:06

标签: scala list scala-collections scalatest for-comprehension

我遇到了这个错误:

  

错误:非法启动简单表达式   def process_alcs(lines:List [String]):List [(String,Double)] = for(line< - lines)yield(val a = line.split(“,”))(a [0],a [ 4] .toDouble)

这段代码:

def process_alcs(lines: List[String]) : List[(String, Double)] = 
  for (line <- lines) yield (val a = line.split(",")) (a[0],a[4].toDouble)

我首先认为这是一个括号不匹配,但我检查了100次

1 个答案:

答案 0 :(得分:3)

尝试

 def process_alcs(lines: List[String]) : List[(String, Double)] = for (line <- lines) yield {
   val a = line.split(",")
   (a(0),a(4).toDouble)
 }

基本上,您在收益率中执行多线评估。因此,您必须使用{而不是(将代码封装在其中。此外,两个语句都应该封装在一个{}对中,因为它们可以构建到您想要的结果。

此外,使用()而不是[]访问scala中的数组成员。所以,你想使用(0)而不是[0]

另外,这似乎与其他人今天提出的另一个问题相关,在这种情况下,他希望转换为第4列中的两倍。要访问第4列,您需要使用(3)。

在这种情况下,代码变为,

def process_alcs(lines: List[String]) : List[(String, Double)] = for (line <- lines) yield {
  val a = line.split(",")
  (a(0), a(3).toDouble)
}

希望这会有所帮助。如果您还有其他问题,请与我们联系:)

编辑:要转换为地图,请尝试

def process_as_map(lines: List[String]) : Map[String, Double] = {
  val results: List[(String, Double)] = for (line <- lines) yield {
    val a = line.split(",")
    (a(0), a(3).toDouble)
  }
  results.toMap
}

请参阅评论以获取解释,以及我根据您的代码进行调整的原因