Yerel olmayan değişken - Non-local variable

Gelen dil teorisini programlama , bir yerel olmayan değişken yerel kapsam tanımlanmamış bir değişkendir. Terim genel değişkenlere atıfta bulunabilse de, öncelikle bazı değişkenlerin ne yerel ne de genel kapsamda olamadığı iç içe ve anonim işlevler bağlamında kullanılır .

In Lua onlar denir upvalues işlevin.

Örnekler

İç içe geçmiş işlevler

Aşağıdaki Python 3 örneğinde inner , başka bir işlevin kapsamında tanımlanmış iç içe geçmiş bir işlev vardır outer . Değişken x yereldir outer , ancak yerel değildir inner (küresel de değildir):

def outer():
    x = 1
    def inner():
        nonlocal x
        x += 1
        print(x)
    return inner

Javascript'te, bir değişkenin konumu, var bu değişken için en yakın ifadeyle belirlenir . Aşağıdaki örnekte, bir ifade içerdiği için x yereldir , oysa değildir. Bu nedenle, x aşağıdakiler için yerel değildir : outer var xinnerinner

function outer() {
    var x = 1;
    function inner() {
        x += 1;
        console.log(x);
    }
    return inner;
}

Anonim işlevler

Aşağıdaki Haskell örneğinde, değişken c anonim işlevde yerel değildir \x -> x + c :

outer = let c = 1 in map (\x -> x + c) [1, 2, 3, 4, 5]

Uygulama sorunları

Yerel olmayan değişkenler, bir programlama dilinde yuvalanmış, anonim, üst düzey ve dolayısıyla birinci sınıf işlevleri desteklemenin zor olmasının birincil nedenidir .

Yuvalanmış işlev veya işlevler (karşılıklı olarak) özyinelemeliyse , çerçeve işaretçisi yalnızca yuvalanmış işlevin yerel değişkenine işaret ettiğinden, yerel olmayan değişkenin çağrı yığınında tam olarak nerede tahsis edildiğini derleyicinin bilmesi zorlaşır ve Aradaki yığında rastgele sayıda etkinleştirme kaydı olabilir . Bu genellikle erişim bağlantıları veya görüntü kayıtları kullanılarak çözülür .

İç içe geçmiş işlev, daha yüksek dereceli bir işleve bir argüman olarak aktarılırsa, yerel olmayan değişkenleri bulmak için bir kapama oluşturulmalıdır . İç içe geçmiş işlev, dış işlevinin bir sonucu olarak döndürülürse (veya bir değişkende saklanırsa), yerel olmayan değişkenler artık yığın üzerinde kullanılamayacaktır. Bunun yerine yığın olarak tahsis edilmeleri gerekir ve yaşam süreleri, onları bildiren ve tahsis eden dış işlevin ömrünün ötesine uzanır. Bu genellikle çöp toplama gerektirir.

Notlar

Referanslar