SORU
20 HAZİRAN 2009, CUMARTESİ


JavaScript ve Lua arasında ince farklar

Ben sadece JavaScript seviyorum. Çok şık (tabii fanboy arka planda sessiz iç çekme sesi hayal edin).

Bu yüzden, son zamanlarda löve2d çerçeve (güzel!) Lua ile oynadım - Lua de harika olduğunu düşünüyorum. Onlar benim gördüğüm kadarıyla, bu iki dilçokbenzer.

Bariz farklar var

  • sözdizimi
  • sorun etki alanı
  • kitaplıkları
  • türleri (bir bit)

ama daha ince olanlar? Biraz farklı sadece Lua çalışan bir JavaScript kodlayıcı hafife almak bir şey var mı? Diğer bir çalışıyor bir dilin deneyimli kodlayıcı için açık olmayabilir herhangi bir tuzaklar var mı?

Örneğin: Lua, diziler ve karma ayrı (sadece tablolar var) - JavaScript, sayısal Diziler ve karma Nesneler. Peki, bu daha belirgin farklardan biri.

Ama değişken kapsamı, değişmezliğini tanıdı farklılıklar ya da böyle bir şey var mı?

CEVAP
20 HAZİRAN 2009, CUMARTESİ


Biraz daha farklılıklar:

  • Luayerel destek coroutines için vardır.
  • LuaHerhangi bir karşılaştırma operatörleri türleri arasında doesn't convert. JS, === !== sadece hokkabazlık türü yok.
  • Luaüs alma operatörü (^);JSyok.JSçok fazla operatörler de dahil olmak üzere üçlü koşul operatörü (?:), arttırma/azaltma, bit operatörleri, yazın operatörleri (typeof instanceof), ek atama ve ek operatörler karşılaştırma operatörleri.
  • JS, eşit ve operatörlerin ve ark az daha düşük bir öncelik vardır eşittir. Lua, tüm karşılaştırma operatörleri same precedence.
  • Luadestekler 31**.
  • Luadestekler 32**. Henüz standart değilJavascript, Mozilla JS motoru (Opera, bir ölçüde) JS 1.7 (Firefox 2 parçası olarak kullanılabilir) adı altında bu yana benzer bir özellik desteklemiştir "destructuring assignment". JS Destructuring bağlamlarda atama dışında, function definitions & calls loop initializers gibi kullanılabilir olarak daha genel. Destructuring assignment bir süre için ECMAScript (Javascript arkasında dil standart) önerilen bir yanı olmuştur.
  • Lua, 37**.
  • Luasenigetfenv & setfenv manipulate environments olabilir.
  • JStüm fonksiyonları variadic.Luafonksiyonları explicitly declared as variadic olmalıdır.
  • ForeachJSnesne özellikleri üzerinde döngüler. ForeachLuaanahtar for kullanın) üzerinde kullanımına döngüler ve daha genel.
  • JS global ve fonksiyon kapsamı vardır.Luaglobal and block scope. Yapıları blocks yeni (, *, while*13 12*örneğin *) takdim kontrol.

    • Ölçüm kuralları arasındaki farklılıklar, dış değişken bir tartışma denir başvuru nedeniyle ("" Lua dilinde) farklı Lua ve . işlenebilir upvalues denir ^em>Javascript. Bu closures in for loops, en çok deneyimli olan ve sürpriz bir şekilde bazı insanları yakalar.Javascript, for bir döngü vücudun herhangi bir fonksiyon döngü vücuttaki tüm başvuru same outer variables ilan yani yeni bir kapsam tanıştırmıyor. Lua, for döngünün her tekrarında her döngü değişkeni için yeni bir yerel değişken oluşturur.

      local i='foo'
      for i=1,10 do
        -- "i" here is not the local "i" declared above
        ...
      end
      print(i) -- prints 'foo'
      

      Yukarıdaki kodu eşdeğerdir:

      local i='foo'
      do
        local _i=1
        while _i<10 do
          local i=_i
          ...
          _i=_i 1
        end
      end
      print(i)
      

      Sonuç olarak, fonksiyonları ayrı yineleme tanımlanan her başvurulan döngü değişkeni için farklı upvalues. Ayrıca Implementation of closures in Lua? Nicolas Bola cevaplarını görmek ve "What are the correct semantics of a closure over a loop variable?" ve "The Semantics of the Generic for".

  • Tamsayı hazır bilgiJSsekizli olabilir.
  • JSaçık Unicode desteği vardır.
  • Lua, ~ ! yerine kullanılır. (, if foo ~= 20 then ... end) (teknik olarak sözdizimi, ama kolayca gözden kaçan ve ince hataların neden olur).
  • Lua, not/or/and anahtar kelimeler !/||/&& (da) değil, aynı zamanda sözdizimi kolay kolay unutulmaz yerine kullanılır.
  • Luadeğer herhangi bir türü (nil NaN hariç) dizin için bir tablo; kullanılabilirJavaScriptdizinler dizeleri dönüştürülür nesne.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • emimusic

    emimusic

    10 Mart 2006
  • katherine gomez

    katherine go

    1 Aralık 2011
  • Xbox

    Xbox

    1 Kasım 2005