パッケージをロードすることによって,シンボルが「シャドーイング」されることがある.以下はその対処方法である.
シンボルまたは関数を定義する
シンボルA1を定義する:
デフォルトでは,新しいシンボルはGlobal`のコンテキストに作成される:
パッケージをロードする
パッケージをロードする.このパッケージでは,シンボルA1はMusic`のコンテキストで定義されているので,先ほど定義されたシンボルGlobal`A1がシャドーイングされる:
A1はMusic`のコンテキストにあるシンボルを参照するようになった:
Music`のコンテキストでのA1の値は,Global`のコンテキストでの値とは異なる.赤色はGlobal`A1シンボルがシャドーイングされていることを示す:
先ほど定義されたA1の値には,コンテキストを明示的に指定することによってアクセスできる:
- 「シャドーイング」とは,同じシンボルがコンテキストパス$ContextPath上の2つ以上のコンテキストに存在するため,明示的なコンテキストを指定しない限り,1つまたは複数のシンボルにアクセスできないことを意味する.この詳細については, コンテキストとパッケージを参照のこと.
シャドーイングを解決する
シャドーイングされているシンボルを削除して,シャドーイングの問題を解決する:
A1シンボルが赤色で表示されなくなった.これはシンボルが別のシンボルをシャドーイングしなくなったことを示す:
注釈
ユーザ定義のシンボルと関数を小文字で始めることを習慣付けることによって,シャドーイングの問題は回避できる.
シャドーイングが起こるのはユーザ定義のシンボルに限らない.2つのパッケージで同じシンボルが定義されている場合,同じセッションで両方のパッケージをロードすると,シャドーイングが起こる.その場合,どちらかのシンボルを削除することによって,シャドーイングの問題を解決することができる.