0
代碼片段來自Scala REPL。錯誤:類型不匹配;發現:Unit.type required:單元
這是完全合法的斯卡拉,即使它是不是非常有用:
scala> class Test {
private val xs = scala.collection.mutable.ArrayBuffer[Int]()
private val func = Some((x: Int)=>{
})
private var opt: Option[(Int)=>Unit] = None
opt = func
}
defined class Test
但是,如果我嘗試做內func
一些代碼將無法編譯:
scala> class Test {
private val xs = scala.collection.mutable.ArrayBuffer[Int]()
private val func = Some((x: Int)=>{
xs += x
})
private var opt: Option[(Int)=>Unit] = None
opt = func
}
<console>:13: error: type mismatch;
found : Some[Int => Test.this.xs.type]
required: Option[Int => Unit]
opt = func
^
相反,它產生類型不匹配錯誤並列出找到和需要的類型。儘管此錯誤消息很有用,但我不知道如何解決此問題。我的下一個嘗試是這樣的:
scala> class Test {
private val xs = scala.collection.mutable.ArrayBuffer[Int]()
private val func = Some((x: Int)=>{
xs += x
Unit
})
private var opt: Option[(Int)=>Unit] = None
opt = func
}
<console>:14: error: type mismatch;
found : Some[Int => Unit.type]
required: Option[Int => Unit]
opt = func
^
我明白,有發生的類型不匹配,但我不明白爲什麼有一個類型不匹配或如何解決它以這樣一種方式,我可以做一些有用的東西里面func
。
爲什麼會出現類型不匹配以及如何修復?
因此,當我試圖將Unit指定爲函數的最後一行時,它看起來像是在正確的軌道上。 'Unit'和'()'有什麼區別? – axiopisty 2014-12-03 04:05:43
這基本上是一樣的,新單元==()==「java void」 – 2014-12-03 04:07:22
基本上,但不是真的。 '()'編譯,而'Unit'不編譯。我想我可以爲此提出另一個問題。 – axiopisty 2014-12-03 04:08:24