我对Scala类型推断有些麻烦.在下面的工作表示例中,我定义了一个Map,它将Any值映射到返回Unit值的函数.
有趣的是,当我尝试使用一行代码定义相同的地图时,它不起作用,因为'bar'函数返回类型突然变为Any而不是Unit.
type UnitFun = (Any) => Unit
val foo = "foo"
val bar = (a: Any) => System.out.println("bar")
val map: Map[Any, UnitFun] = Map().withDefaultValue(((a: Any) => Unit))
val doesCompile: Map[Any, UnitFun] = map + (foo -> bar)
val doesNotCompile: Map[Any, UnitFun] = Map().withDefaultValue(((a: Any) => Unit)) + (foo -> bar)
Run Code Online (Sandbox Code Playgroud)
我使用IDEA14作为IDE与Scala 2.11.6
在我看来,这是Scala编译器的功能/ Bug,还是我错过了什么?
顺便说一句我刚注意到当我在'doesNotCompile'中使用'bar'作为默认值时,就像这样:
val doesCompileNow: Map[Any, UnitFun] = Map().withDefaultValue(bar) + (foo -> bar)
Run Code Online (Sandbox Code Playgroud)
它突然似乎有效,我现在非常困惑.:d
编辑1:@Mikolak
在这种情况下,以下代码如何工作?:)
val a: Any => Unit = (a: Any) => Unit
val …Run Code Online (Sandbox Code Playgroud) 我想知道是否可以使用HTML和CSS对html选择标记中的选项进行排序.
所以给出以下片段:
<select>
<option>c</option>
<option>b</option>
<option>a</option>
</select>
Run Code Online (Sandbox Code Playgroud)
我希望浏览器按以下顺序显示这些项目:
a
b
c
Run Code Online (Sandbox Code Playgroud)
使用javascript,或者更糟糕的是希望这些元素预先排序只是感觉错了:)
谢谢
由于搜索:+不会产生任何结果(谢谢谷歌!)我找不到任何问题的答案:
为什么是:
a :+ b
Run Code Online (Sandbox Code Playgroud)
导致
List[Any]
Run Code Online (Sandbox Code Playgroud)
如果'a'和'b'都是类型的
List[Int]
Run Code Online (Sandbox Code Playgroud)
自己尝试一下,下面不会编译(Scala 2.11.6,Idea14):
object AAA extends App {
val a: List[Int] = List[Int]()
val b: List[Int] = List[Int]()
val x: List[Int] = a :+ b
}
Run Code Online (Sandbox Code Playgroud)
thx提前