2015-03-31 21 views
3

我是新來斯卡拉最近我遇到了下面的一段代碼:顯式空參數

object Foo { 
    implicit lazy val myGlobalExecutionContext: ExecutionContextExecutor = 
    impl.ExecutionContextImpl.fromExecutor(null: Executor) 
} 

我檢查了fromExecutor簽名,是這樣的

def fromExecutor(e: Executor): ExecutionContextExecutor 

我的問題是,爲什麼我們做了:

impl.ExecutionContextImpl.fromExecutor(null: Executor) 

,而不是簡單地

impl.ExecutionContextImpl.fromExecutor(null) 

爲什麼我們在調用方法時傳遞一個參數類型?

回答

6

在這種情況下我沒有看到任何特定的原因,但fromExecutor可能會被重載,我們可能想要確保調用特定的重載。例如:

case class Bar(id: Int) 
case object Baz 

object Test { 
    def fromBar(bar: Bar): Bar = bar 
    def fromBar(baz: Baz): Bar = Bar(0) 
} 

如果我稱之爲:

scala> Test.fromBar(null) 
<console>:20: error: ambiguous reference to overloaded definition, 
both method fromBar in object Test of type (baz: Baz)Bar 
and method fromBar in object Test of type (bar: Bar)Bar 
match argument types (Null) 
       Test.fromBar(null) 

我得到一個錯誤,因爲調用是不明確的。 null可以是BarBaz。所以我必須使用類型轉換或歸類來使用特定的過載:

Test.fromBar(null: Bar)