最も一般的なケースとしては、クラス内でフィールドを宣言した後にメソッド内でも宣言し、同じ名前のローカル変数または変数を使用する場合が挙げられます。
class Foo(foo: Int) {
def test(): Int = {
val foo: Int = 1 // ハイライトされます
foo
}
}
これは簡単に補足できますが、フィールドが別ファイル内のスーパークラスやトレイトで宣言されている場合は難しくなります。フィールドの可視性が低くなり、エラーが発生しやすくなります。
// TraitA.scala
trait TraitA {
def n: Int = 1
}
// ObjectA.scala
object ObjectA extends TraitA {
def foo(): Unit = {
val n: Int = 0 // ハイライトされます
}
}
クラスが変数を定義し、サブクラスが同じ名前の値を定義するようなコーナーケースでは、 サブクラスの値はスーパークラスの変数をオーバーライドできず、代わりにそれをシャドーすることしかできません。 これにより、自明でないエラーが発生する場合があります。 Scala コンパイラーでは、このようなケースで警告を出す -Xlint:private-shadow オプションを使用できます。
「オプション」セクションのコンボボックスで、このコーナーケースをハイライトする方法を制御できます。 コーナーケースをクラスまたはトレイトフィールドをシャドーしているローカルフィールドのハイライトと共に常時ハイライトするか、ハイライトしないで他のハイライトを維持するか、「コンパイラーオプションのチェック」を選択してインスペクションにそれに応じた動作をさせるか、コーナーケースのみをハイライトして (コンパイラーのオプションが存在する場合) シャドーしている他のケースをハイライトしないように選択できます。
class C(var c: Int)
// `c` shadows `var c` from the `C` class
class D(c: Int) extends C(c) {
def f: Int = c
}