Eclipse scala在编译时如何处理新行?

Eclipse scala在编译时如何处理新行?,eclipse,scala,Eclipse,Scala,我这里有这个代码,一切都很好: var capital = Map("US" -> "Washington", "France" -> "Paris") println(capital("France")) 现在让我们在贴图之后添加一些新行,因为这样看起来更好: var capital = Map ( "US" -> "Washington", "France" -> "Paris" ) printl

我这里有这个代码,一切都很好:

var capital = Map("US" -> "Washington", "France" -> "Paris")

println(capital("France"))
现在让我们在贴图之后添加一些新行,因为这样看起来更好:

    var capital = Map
    (
        "US" -> "Washington", 
        "France" -> "Paris"
    )

    println(capital("France")) //error
Eclipse给了我一个错误消息:
类型不匹配;发现:java.lang.String(“France”)必需:(?,?)Start.scala/ScalaProject/src第11行scala问题

啊,为什么?就因为我在新台词后面加了东西?实际上,我可以在没有任何错误消息的情况下执行此操作:

var capital = Map("US" -> "Washington", "France" -> "Paris")

println(

    capital


    (

    "France")) //no error
那么地图的问题是什么?scala如何处理新行?我只是糊涂了

编辑:我正在使用

scala -version
Scala code runner version 2.9.2 -- Copyright 2002-2011, LAMP/EPFL

在REPL中输入行时(不确定Eclipse),将尝试任何本身有效的行

var capital = Map
是有效的,因此其余部分被解释为一个单独的语句(它实际上使用映射创建了一个Tuple2,然后丢弃它们,因为它们没有分配给任何对象)。在shell(或
:paste
模式中的REPL)中,它临时尝试加入行,然后一切正常

要在REPL中解决这个问题,并遵循惯用的Scala样式,您应该在前一行保留大括号和圆括号:

var capital = Map(
  "US" -> "Washingtion",
  "France" -> "Paris"
)
如果你有一个某种类型的开放块,编译器会任意地寻找一个封闭块;如果REPL(不在
:粘贴
模式下)在一行中找到两个空行,它将跳转,但将跳过一行

val works = Map(

  1 -> "one"
)

val fails = Map(


  2 -> "two"
)

但是请注意,
失败
只有在该行完全为空时才会失败;如果行上甚至有空格(例如,通过缩进放在那里),REPL将继续读取更多行,希望您键入更多代码来完成该块。

只是想知道,为什么PRINNT(大写/新行/新行)以后不会出现大括号问题(您有一个开括号,因此编译器会一直查找,直到找到匹配的close、换行符或no。它还能明智地做什么?