scalaでは、これら2つのインポート戦略の違いは何ですか?
オプション1
import com.somepackage
class MyClass {
//further code
}
オプション 2
class MyClass {
import com.somepackage
//further code
}
scalaでは、これら2つのインポート戦略の違いは何ですか?
オプション1
import com.somepackage
class MyClass {
//further code
}
オプション 2
class MyClass {
import com.somepackage
//further code
}
Scala では、imports はレキシカル スコープです。imported 識別子は、それらが ed されたスコープ内でのみ表示さimportれます。
最初のケースでは、スコープはファイルであるため、imports はファイル全体で表示されますが、他のファイルでは表示されません。2 番目のケースでは、スコープはクラスであるため、 s はクラス全体で表示されますが、同じファイル内であってもimport他のクラスでは表示されません(もちろん、 内にネストされたクラスを除く)。MyClass
importのスコープを単一のメソッドや単一のブロック (!) に限定することもできます。
class Foo {
def bar {
// do something
{
import baz.quux.Frotz
// use Frotz
}
// Frotz not visible here
}
}
これは、Scala の規則性、直交性、および単純さの良い例です。たとえば Java では、ブロックはローカル変数のスコープを作成しますが、imports (またはメソッドなど) のスコープは作成しません。Scala では、ブロックはスコープを作成します。限目。例外もコーナーケースもありません。
はimport中かっこの間にあるため、中かっこの間にのみ表示されます。それはあなたが期待することをするだけです。
違いは次のとおりです。
Option 1インポートでは、完全な範囲で実行可能です。つまり、任意のクラス/特性/関数を、com.somePackage内部/外部のどこでも使用できます。MyClass
ただし、範囲が内部のみに限定されているためOption 2、内部でのみ使用でき、外部では使用できません。MyClassimportMyClass