【发布时间】:2016-12-13 21:27:38
【问题描述】:
我觉得我应该以我正在使用 sbt 构建我的项目这一事实作为开头。
我的问题是,如果在编译时一个方法返回一个未导入类型的东西,在我调用该方法的文件中,只要我使用类型推断,一切都会编译。一旦我尝试将未导入的类型分配给我使用函数的返回值创建的 var/val,就会出现编译器错误。
假设我在两个包中有两个类。包main 中的类App 和包libraries 中的类Imported。让我们进一步说,我们在 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++ 中还没有注意到它?
两种有效方法(导入和显式类型与推断)中的一种是否比另一种具有优势/缺点? (当然,期待一个更明确和冗长,另一个更短)
这是黑魔法还是 Scala 编译器以一种相当直接的方式完成了这些推论?
【问题讨论】:
标签: scala types casting jvm return-type-deduction