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