我覺得我應該以這樣一個事實開頭,即我正在用sbt構建我的項目。斯卡拉,爲什麼我不需要導入推導類型
我的問題是,如果在編譯時某個方法返回某個未導入類型的東西,則在我調用該方法的文件中,只要我使用類型推斷,就會編譯所有內容。一旦我嘗試將我的函數的返回值創建的var/val分配給unimported類型,我得到一個編譯器錯誤。
可以說我有兩個包中的兩個類。包中的類爲App
,包main
和類Imported
包libraries
。讓我們進一步說,我們在包main中有一個類ImportedFactory
,並且這個類有一個創建類型爲Imported的對象的方法。
此代碼編譯就好:
class App() {
// method return object of type Imported
val imp = ImportedFactory.createImportedObject()
}
這不:
class App() {
// method return object of type Imported
val imp : Imported = ImportedFactory.createImportedObject()
}
這又一次做:
import libraries.Imported
class App() {
// method return object of type Imported
val imp : Imported = ImportedFactory.createImportedObject()
}
這似乎是很奇怪的行爲。這對編譯時類型推斷的語言來說是正常的,而且由於我的無知,直到現在我還沒有注意到它在go/C++中?
兩種有效方法之一(導入&顯式類型與傳染)有優點/缺點比其他? (當然,期望的是一個更明確和詳細,另一個更短)
這是黑魔法還是斯卡拉編譯器以相當直接的方式完成這些扣除?
我挪用了動態鑄造這個術語,這可能確實對我的問題造成了很多混淆(並且缺乏建議),對不起。 – George