SORU
16 Mayıs 2011, PAZARTESİ


Fonksiyon değişkenleri tanımlamak için varsayılan değerler

Lua wiki eksik bağımsız değişken için varsayılan değerleri tanımlamak için bir yol buldum:

function myfunction(a,b,c)
    b = b or 7
    c = c or 5
    print (a,b,c)
end

Bunun tek yolu nedir? PHP stili myfunction (a,b=7,c=5) çalışmak için görünmüyor. Lua şekilde olmadığını, sadece bunu yapmak için tek yolu olup olmadığını merak ediyorum.

CEVAP
16 Mayıs 2011, PAZARTESİ


Eğer PHP ya da Python gibi argümanlar ve varsayılan değerler adlı istiyorsanız, bir tablo ile fonksiyon oluşturucu diyebilirsiniz:

myfunction{a,b=3,c=2}

(Bu Lua the advanced forms of LuaSocket's protocol modules gibi pek çok yerde görülür ve*.* 15) kurucular

Böyle bir imza var kendisi olabilir fonksiyonu

function myfunction(t)
    setmetatable(t,{__index={b=7, c=5}})
    local a, b, c =
      t[1] or t.a, 
      t[2] or t.b,
      t[3] or t.c
    -- function continues down here...
end

Herhangi bir değer parametreleri tablosundan eksik metatable (the documentation on metatables) __index tablodan alınacaktır.

Tabii ki, daha gelişmiş parametre stilleri tablo kurucular elde etmek mümkündür ve işlevleri - ne istersen yazabilirsin. Örneğin, here bir işlev oluşturur bir işlevi alır adlı ya-konumsal bağımsız tablolardan bir tablo tanımlama parametre adları ve varsayılan değerleri ve işlevi alarak düzenli bir bağımsız değişken listesi.

Dil dışı düzey bir özellik olarak, bu tür çağrıları yeni davranışlar ve anlambilim sağlamak için değiştirilebilir:

  • Değişkenler birden fazla adı kabul etmek için yapılmış olabilir
  • Konumsal değişkenler ve değişken anahtar kelime serpiştirilmiş olabilir - ve her iki tanımlama da (veya hata nedeni) için öncelik verebilir
  • Anahtar kelime sadece positionless değişkenleri yapılması gibi pozisyonu sadece olanları isimsiz
  • Oldukça-ayrıntılı tablo yapımı bir dize ayrıştırma tarafından yapılabilir
  • Bağımsız değişken listesi bir işlev şeyler 1 masa dışında çağrılırsa verbatim kullanılabilir

Bazı yararlı fonksiyonlar için yazılı argüman çevirmen unpack (hareketli table.unpack 5.2), setfenv (itiraz 5.2 ile yeni _ENV inşaat) ve select (döner bir tek değer verilen bir bağımsız değişken listesi, ya da uzunluğu listesiyle '#').

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DragsterMC Gaming

    DragsterMC G

    30 HAZİRAN 2013
  • segtlim

    segtlim

    21 EKİM 2008
  • TomKNJ

    TomKNJ

    26 ŞUBAT 2007