をインポートする必要はありません。Scalaは、なぜ私が推定されるタイプ
私の問題は、場合、コンパイル時にメソッドがある限り、私は型推論を使用して、すべてがコンパイル、私はメソッドを呼び出すファイルで、unimportedタイプのものを返す、ということです。いったん私の関数の戻り値で作成したvar/valにインポートされていない型を割り当てようとすると、コンパイラエラーが発生します。
は、私は2つのパッケージに2つのクラスを考えてみましょう。パッケージlibraries
パッケージmain
とクラスImported
のクラスApp
。さらにより多くの私たちは、メインとこのクラスがインポートされたタイプのオブジェクトを作成するための方法があり、そのパッケージ内のクラスImportedFactory
を持っていることを言うことができます。
このコードはうまくコンパイル:
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()
}
これはかなり奇妙な行動のように思えます。これはコンパイル時に型推論を持つ言語では普通ですか?私は無知のために/ C++に行くまでこれまで気づいていませんか?
は、2つの有効なアプローチ(infered対輸入&明示的な型)のいずれかを他の上の利点/欠点がありますか?
この黒い魔法はありますか、Scalaコンパイラはこれらの控除をむしろ順調に進めていますか?いいえ、それは賢明で冗長ではありません。
私はダイナミックキャスティングという用語を流用しましたが、それは実際に私の質問に関するかなりの混乱(および提案の欠如)を引き起こしている可能性があります。 – George