我这里有这个代码,一切都很好:
var capital = Map("US" -> "Washington", "France" -> "Paris")
println(capital("France"))
Run Code Online (Sandbox Code Playgroud)
现在让我们在Map之后添加一些新行,因为它看起来好像这样:
var capital = Map
(
"US" -> "Washington",
"France" -> "Paris"
)
println(capital("France")) //error
Run Code Online (Sandbox Code Playgroud)
Eclipse给出了一条错误消息: type mismatch; found:java.lang.String("France") required: (?, ?) Start.scala /ScalaProject/src line 11 Scala Problem
嘿,为什么?只是因为我在新线后加入了这些东西?实际上我可以做到这一点,没有任何错误信息:
var capital = Map("US" -> "Washington", "France" -> "Paris")
println(
capital
(
"France")) //no error
Run Code Online (Sandbox Code Playgroud)
那么Map有什么问题?scala如何处理新行?我只是困惑.
编辑:我正在使用
scala -version
Scala code runner version 2.9.2 -- Copyright 2002-2011, LAMP/EPFL
Run Code Online (Sandbox Code Playgroud)
在REPL中输入行(不确定Eclipse)时,会尝试任何可能有效的行.
var capital = Map
Run Code Online (Sandbox Code Playgroud)
是有效的,所以其余的被解释为一个单独的语句(实际上创建一个带有映射的Tuple2,然后丢弃它们,因为它们没有分配给任何东西).在shell(或:paste模式中的REPL )中,它暂时尝试加入行,然后一切正常.
要在REPL中解决这个问题 - 并遵循惯用的Scala样式 - 你应该在前一行留下开括号和圆括号:
var capital = Map(
"US" -> "Washingtion",
"France" -> "Paris"
)
Run Code Online (Sandbox Code Playgroud)
如果你有某种类型的开放块,编译器将任意寻找关闭; REPL(非:paste模式)如果在一行中找到两个空行但跳过一行,则会保释.
val works = Map(
1 -> "one"
)
val fails = Map(
2 -> "two"
)
Run Code Online (Sandbox Code Playgroud)
但请注意,fails只有在线条完全为空时才会失败; 如果线上甚至有空格(例如通过缩进放置),REPL将继续读取更多行,希望您将输入更多将完成块的代码.
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |