Lua – Lua'yı yükledi. Lua – Lua ile robotlar için Lua Programının Kurulumu

Golovna / Kurulum
Bu ders serisi, planladığım gibi, Lua programlamanın dilini tartışacak. Raporu yeni başlayanlar için mümkün olduğunca erişilebilir hale getirmeye çalışacağım ve onlara kendim odaklanacağım. Yani, her şeyi görmüş olan kanıtlanmış Lua kodlayıcıları olarak, bundan öğrenilecek yeni bir şey yok (üzgünüm, burada saç stilleri ve saygı için daha fazla yer bulacaklar, sanki rüzgar kendi yanlarından uçuyormuş gibi), ama var omuzlarında hiçbir şey yok, çok fazla program yapıyorsun, o zaman bence suçlusun.

Serinin tamamı herhangi bir sistem tarafından sıralanmamıştır. Dersler bir dizi dil yapısını sırayla tanıtacak, böylece üçüncü veya dördüncü derste kendi programlarınızı yazabileceksiniz. Amacım, dili kendi başınıza öğrenmenizi teşvik etmek, anlamanıza yardımcı olmak ve A'dan Z'ye açıklamak değil - dile ayrıntılı olarak hakim olmak istiyorsanız önceki makaleyi okuyun (ki bu makale ne kadar kötü olursa olsun, Rusçaya çevrilmiştir: http://www.lua.ru/doc/). Merezha'nın "aptallar için" derslerinden öğretmen eğitimine ne kadar erken geçerseniz o kadar iyi olur.

Anlamadıysanız lütfen yemeğinizi yorumlara yazın, ben ve diğer katılımcılar size yardımcı olmaya çalışacağız.

Lua, yabancı amaçlar için popüler, ustalaşması zor, yorumlanan, dinamik olarak yazılmış bir dil programlamasıdır. Hayır, ön teklifte söylenen kelimelerin yarısını bile anlamanıza gerek yok; sadece bunun popüler ve tuhaf olduğunu bilin. Basitliği ve dağıtımın küçük boyutu (yaklaşık 150 kilobayt) ona popülerliğini kazandırdı. Lua komut dosyaları, oyunlar dahil çok sayıda program tarafından desteklenir. World of Warcraft ve S.T.A.L.K.E.R. Lua dilini vikorize edin. Favori oyun motorum, Lua'yı kullanarak kolayca farklı oyunlar oluşturmanıza olanak tanıyor. Gördüğünüz gibi Lua size engin ufuklar açıyor!

Öncelikle programlama için orta kısmı planlamalısınız: Lua'da yazdığınız kodu kabul edecek ve onu yaratacak bir program bulmak: bir tercüman. Burada üç seçenek var:

1. Resmi Lua dağıtımını bunları sağlayan sitelerden birinden indirin.

Resmi Lua web sitesinden tercümanın çıkış kodlarını indirebilirsiniz. Ancak İkili Dosyalar bölümünde http://lua.org/download.html adresini ziyaret ederek sitede Windows için indirilen dosyaların bulunduğu bir gönderi görebilirsiniz. Onlardan biri: . Lütfen arşivlerden birini seçin (platformunuza bağlı olarak: Win32 veya Win64) ve onu kısa yolu olan bir dizinde açın: C:\lua. Şu andan itibaren Windows kullandığınızı ve tercümanınızın orada yattığını takdir ediyorum.

Linux tabanlı işletim sistemi kullanıcıları için çözüm daha basittir: Paket yöneticisini hızlı bir şekilde kullanmaları ve Lua'yı depolardan yüklemeleri yeterlidir. Debian ve Ubuntu için apt-get install lua komutunu kullanın ve Fedora, Red Hat ve benzeri dağıtımlar için yum install lua komutunu kullanın. Ancak bana körü körüne güvenmeyin ve işletim sisteminizin sizin için nasıl çalıştığını öğrenmek için kaynağına gidin.

2. Çevrimiçi bir tercüman kullanın.

http://www.lua.org/demo.html adresini bulun. Baştan indirebilirsiniz ancak modüllere dokunursanız çevrimdışı sürümle karıştırırsınız. Çevrimiçi tercümanı kullanmak çok basittir: Metnin sonunda programınıza girin ve Çalıştır düğmesine tıklayın. Programda oturum açılacaktır, Çıktı penceresinde programınızın sürümünün yanı sıra yaptığınız hatalar hakkındaki bilgiler de görüntülenecektir.

3. Vikorystuvati IDE.

Örneğin, ZeroBrane Studio: http://studio.zerobrane.com/. Ve diğerleri - internette arama yapın.

Bugün Lua'nın iki farklı sürümü kullanılıyor: 5.1 ve 5.2. Kalan sürüme - sürüm 5.2 - odaklanıyorum, ancak geri kalan sürüm hala genişletilmiş olduğundan kesinlikle 5.1 ile arasındaki önemli farklara dikkat çekeceğim. Konuşmadan önce Lua 5.1, bilginiz olsun diye Lua 5.1'in kodunu yazardan Lua 5.2 ile aynı saate değiştiriyor.

=== Ders No. 1 ===

Öyleyse görelim. Main.lua dosyasını üçüncü taraf dosyalardan yalıtılmış bir klasörde oluşturun ve ona yazın:

200?"200px":""+(this.scrollHeight+5)+"px");">
-- main.lua --
print("Merhaba dünya!")

Bundan sonra komut satırında çalıştırın (ek bir CD için main.lua dizinine geçmeyi unutmayın):

200?"200px":""+(this.scrollHeight+5)+"px");">
> C:\lua\lua.exe main.lua

Lua tercümanı şöyle görünür:

200?"200px":""+(this.scrollHeight+5)+"px");">
Selam Dünya!

Prensip olarak kimin izinin bulunması gerekiyordu. Programlar yazdırma işlevini çağırdı. Yazdırma işlevi çok sayıda parametreyi kabul eder ve bunları ekranda görüntüler. Kimin kıçını geçtik (sembollerin mızrağı) "Merhaba dünya!" Aynı başarı ile parametre olarak iletebilirsiniz:

200?"200px":""+(this.scrollHeight+5)+"px");">
print(8) - onuncu sayı
-- yaşadı: 8

Yazdır(0xDEADBEEF) - on altıncı sayı
-- yaşananlar: 3735928559

Print("0xDEADBEEF") - ancak bir sayı değil, bir dizi! Pençeleriniz mi ağrıyor?
-- görünüm: 0xDEADBEEF

Print(1.35e-4) -- kayan virgüllü bir sayı (kesirli sayı)
- Yaşasın 0.000135. 1,35e-4 izi "1,35, çarpılmış" olarak kabul edilir
- kimsenin bilmediği gibi, dördüncü aşamanın on eksi eksisi.

Yazdır((198*99)-3*500 + 14/88) - viraz
-- Vivede virazu anlamına gelir: 18102.159090909. Kötü alternatif
- Masaüstü hesap makinesi!

Print(198/7, "gübre", 2^9) - yeterli bir sayı için parametreler
- Beğenmek. Görünümün anlamı işaretlerle ayrılmış olarak görüntülenecektir
- Sekmeler:
-- 28.285714285714 gübre 512
- Lütfen patilerinizin gübreye sıkışmamasına dikkat edin!

Print(1.35) - iki sayı, onuncu kesir değil 1.35!
-- Koma parametreleri ayırmak için kullanılır.
- Yaşasın:
-- 1 35

"--" işareti yalnızca güzellik amacıyla eklenen çizgi işaretinin taklidi değildir. Lua'daki "--" işareti yorumları belirtir: programcıya yönelik, yorumlayıcı tarafından göz ardı edilen ipuçları ve kodun anlaşılmasını kolaylaştırmak için tasarlanmıştır. Programa yazmayı deneyebilirsiniz:

200?"200px":""+(this.scrollHeight+5)+"px");">
- yazdır("hiçbir şey")

Tercüman bunun bir yorum olduğunu düşünecek ve talimattan çıkmayacaktır.

Beyler lütfen dikkat: Sadece tek sıra tığ işi yapmak istiyorsanız harf baskısını kollar olmadan şu şekilde yazabilirsiniz:

200?"200px":""+(this.scrollHeight+5)+"px");">
print "Sadece bir dize"

Kullanışlılık elbette şüphelidir: bunun mümkün olduğuna saygı gösterin. Aynı zamanda bu tür yorumlar kabul edilemez:

200?"200px":""+(this.scrollHeight+5)+"px");">
yazdır 2 - kelime yok, 2 - satır değil.
yazdır 2*2 + 6 - artık sormayacağız

Dizi = "dize!!" -- değiştirilen str değerini "string!!" verdi
-- aşağıdaki değişiklikleri okuyun
print str - Bunu ifade etmeme bile gerek yok.

Aşağıdaki bölümlerin her biri için programın kullanımı kolaydır. Bu nedenle, "parantezsiz" bir belirtme çizgisinde, işlevin adının ardından yalnızca bir dizi değişmezi gelebilir (yani, karakter dizisi bacaklara yerleştirilir) ve başka hiçbir şey gelemez. Yakın gelecekte size bu tuhaflıktan biraz sonra bahsedeceğim, yoksa onu hemen sizden çıkaracağım.

Herhangi bir iyi yazılımla aşağıdaki seçenekleri kullanabilirsiniz: her türlü veriyi tutabilen küçük kaplar. Lua'da bunu şu şekilde yapmalısınız:

200?"200px":""+(this.scrollHeight+5)+"px");">
<имя_переменной> = <выражение>

Örneğin:

200?"200px":""+(this.scrollHeight+5)+"px");">
yıldız = 8 -- Artık değiştirilebilir yıldız 8 sayısını koruyor
wars = "baykuş" - Yılan savaşlarında - satır "baykuş"
jedi = 42/2 - Yılan gibi jedi'nin sayısı 21'dir
luke = yıldız * jedi -- Serpentine luke'un sayısı 168'dir (yani 21'in 8 ile çarpılması)

Değişikliklerin değerleri ve bunların arkasında yatan ifadeler de ekranda görüntülenebilir:

200?"200px":""+(this.scrollHeight+5)+"px");">
print(yıldız, savaşlar, jedi, jedi yıldızı+luke)
- Yaşasın:
-- 8 baykuş 21 181

Sadece ünlü yıldızları ve savaşları aldatmaya çalışmayın - "baykuş" a 8 eklemeye çalışırsanız, iyi bir şey elde edemezsiniz!

Fark edebileceğiniz gibi, değişim pratikte şu şekilde olabilir: müstehcenlik, böylece sayılarla başlamaz. Ciddi olarak, değişikliği print adıyla duyurabilirsiniz ve ardından yazdırma işlevi çalışmayı durduracak ve böylece baskı, sesli değişikliğe yanıt vermek zorunda kalacaktır. Değiştirilebilenlerin isimleri olarak vikorystovuvat tarafından engellenen bir grup kelime de var - bunlar dilin henüz öğrenmediğimiz ama aynı zamanda hayret ettiğimiz anahtar kelimeleridir:

200?"200px":""+(this.scrollHeight+5)+"px");">
ve break do elseif end
işlev goto için yanlış ise
yerel sıfır değil veya tekrar dönüşü
o zamana kadar doğru

Bu isimlerden herhangi biri ile değişiklik yaptığınızda programdan af alacaksınız ve kesinlikle bununla uğraşmak zorunda kalmayacaksınız. Size hatırlatmama izin verin: Lua 5.1'de goto anahtar kelimesi yoktur ve onu bu şekilde adlandırabilir veya daha doğrusu bu şekilde çalışmayabilirsiniz.
Ayrıca önemli kişilerin isimlerinin sicile duyarlı olduğundan emin olun. Tse, Shcho Foo, Foo, Foo I Foo - Chotiri Rizni Zmіnni, Tom Yakshcho Vi, Malimi Litrelerinin yılanı olan izi yazdı ve harika yogo yazdılar, sonra her şey için Schwidsha, Programda prytsyuvatiorely yoktu.

Ve şimdi önemli bir nokta var: Dayanılmaz bir değişime varacak kadar düzensiz ve kötü bir şekilde ne yapacaksınız? Diğer dillerin çoğu merhamet çağrısında bulunmaz ancak Lua'da bu durum kabul edilebilir. Şu şekilde yorumlanır: Bilinmeyen değişiklik ne olursa olsun gerçekten doğrudur ancak aynı anlama gelir sıfır. sıfır- Bu kelimeyi hatırla! - "hiçbir şey" anlamına gelen özel bir Lua türü. Sıfır değil ve boş bir satır değil (satır "" gibi görünüyor - ekranda göstermeye çalışın), ama hiçbir şey yok. Şu modeli düşünün: iki kişi var, birinin banka hesabı var ama beş kuruş parası yok, diğerinin banka hesabı boş. Lua açısından ilkinin döviz kuru için 0 dolar, diğerinin döviz kuru için 0 dolar olması önemli olacaktır. sıfır. Ve bu dolar değil, sadece sıfır. Umarım sizi yanıltmamışımdır.

Örneğin şöyle bir program çalıştırmayı deneyin:

200?"200px":""+(this.scrollHeight+5)+"px");">
-- main.lua --
foo = "çubuk"
yazdır(foo, baz)
- Yaşasın:
--bar sıfır

Dolayısıyla base değişkeninin herhangi bir değeri yoktur ancak değerin sıfır olması önemlidir ve yazdırma fonksiyonu bunu anlar ve bunu ekranda “nil” satırı şeklinde görüntüler. Lua'nın bir değişikliğin değerini kontrol etmek için iyi bir yöntemi var: Değişikliğin değeri sıfıra eşit değilse sessizdir. Öte yandan, sıfıra eşit olan farkı açıkça dile getirebilirsiniz:

200?"200px":""+(this.scrollHeight+5)+"px");">
cool_var=nil

Yani çekingen olabilirsiniz ve ilk bakışta aptal görünmek isteseniz bile yine de çekingen olabilirsiniz. İlerleyen derslerde kimin neler yaptığını öğrenecek ve tek başınıza aynı şekilde çalışmaya başlayacaksınız. Kesinlikle Innodi.
Nil'e dikkat edin: nil'in üzerine yazabilirsiniz, ancak onunla aritmetik işlemler gerçekleştiremezsiniz! Eğer print(nil) bundan kurtulursa, o zaman 99+nil betiğinin yapısı daha iyidir, istediğiniz gibi shob 99 + sıfır eklendi 99. İnanın öğrendiğimde çok utandım.

Özet:
1. Yazdırma fonksiyonunu, ne işe yaradığını ve yaylar olmadan doğru şekilde nasıl yazılacağını öğrendik.
2. Change'in nasıl telaffuz edildiğini, değişim isimlerinin içerebileceği ifadelerin (üçlü de olsa) nasıl sayılacağını öğrendik.
3. Sıfır'ı öğrendik, mistik gizemini benimsedik ve gelecekte onunla bağlantı kuracak olanlara aşık olduk.

Bilgilerini geliştirmeye istekli ve istekli olanlar için sadece doğru söylüyorum, Kendinizi bu kadar yetkin hissediyorsanız nelerden kaçınabilirsiniz:
1. En sevdiğiniz şarkının şarkılarını görüntüleyen bir program yazın.
2. Yeni ifadeler kullanmaya çalışın. Eylemlerin neden onlarla işe yaradığını, ancak eylemlerin neden işe yaramadığını anlamaya çalışın. İstemedikleri şeyler için haykırdıkları merhamete hayret edin.

200?"200px":""+(this.scrollHeight+5)+"px");">
2 + "dizge";
6 + "14";
"kutu" - "vox";
1 * "11b"
"148" * "1e6";


3. İki değeri değiştiren bir program yazınız. Tobto:

200?"200px":""+(this.scrollHeight+5)+"px");">
bir = 6502
b = 8086


a'nın 8086'ya ve b'nin 6502'ye eşit olacağını hesaplayın. Bunu yapmak için üçüncü bir değişiklik yapın ve bazı basit yeniden düzenlemeler yapın. Değişimden önce print(a,b) ve sonrasında print(a,b) öğesine tıklayarak komutun doğru olduğundan emin olun.

Windows için Lua (LfW) - Rio de Janeiro Katolik Üniversitesi'nin Tecgraf geliştiricisi tarafından geliştirilen yorumlanmış dil programı. Detaylı tercümanı Sy'min açık metinleriyle her yerde görebilirsiniz.

Yetenekleri, ideolojisi ve uygulamasının JavaScript'e daha yakın olması nedeniyle Lua protea, daha yoğun ve zengin esnek yapılarla karakterize edilir. Lua, nesne sınıfı kavramını açık bir şekilde zayıflatmak istemezken, nesne yönelimli programlamanın çarpma da dahil olmak üzere mekanizmaları, operasyonların yeniden değerlendirilmesini de destekleyen metatablolar kullanılarak kolayca uygulanabilir. Nesneye yönelik bir programlama modeli uygulanmıştır (JavaScript'te prototiptir).

Dil, çoğaltılan yazılımın oluşturulmasında yaygın olarak kullanılmaktadır - örneğin Adobe Photoshop Lightroom paketi için yeni bir grafik arayüzde. Ayrıca, akranların programlanması, öğrenme kolaylığı, kod yazma hızı ve öğrenme kolaylığı sayesinde birçok oyunda (örneğin World of Warcraft) popülerlik kazandı ve genişledi.

Lua, çok paradigmalı bir dil olarak adlandırılmayı hak ediyor. Tek bir paradigmanın programlanmasını sağlayacak bir dizi karmaşık, katı spesifikasyon yerine, farklı görevleri yerine getirmek üzere genişletilebilecek küçük bir dizi temel mekanizma sağlayacaktır.

Yani Lua'da geri dönüş için net bir destek var, koruma ek bir metatablo kullanılarak kolaylıkla uygulanabilir.

Bu yiyecektir, çünkü sık sık içmeyi bırakmak gerekir. Bu şaşırtıcı çünkü kurulum gerçekten basit ve anlaşılır. Orada üzerinde çalışılacak hiçbir şeyin olmadığı söylenebilir. Ale, yiyecek stoku hala eksik olduğundan biraz kurulumdan bahsedelim.

Lua'yı yükledim. Zavantazhuemo

Kurulumdan önce yapmamız gereken ilk şey, çıktı kayıtlarını resmi web sitesinden yakalamaktır: . Kurulum için elbette en son sürüme ihtiyacımız var, şu anda lua 5.1.4. İndirdikten sonra lua kaynak dosyalarını ayrı bir klasöre açmanız gerekecektir.

Lua'yı yükledim. Derleme.

Prensip olarak hiçbir şekilde farklı olmayan iki derleme seçeneği vardır))) Birincisi, Visual Studio Komut İstemi ile derlemedir:

  1. Visual Studio'yu Başlatma
  2. Vikonuemo Araçları->Visual Studio Komut İstemi
  3. Lua klasörüne, vb. dizinine gidin. Eksen şu şekildedir: cd D:/mylibs/lua-5.1.4
  4. Lua derleme komut dosyasını başlatın:etc/luavs.bat
  5. İhtiyacımız olan dosyaları aldık lua.exeі luac.exe

Visual Studio'yu başlatmadan başka bir yol:

  1. Eğer bir mendezhi dosyanız varsa (özellikle içinde çalışıyorum) de_lois/etc/ klasörüne gidin
  2. Dosya düzenlenebilir, ilk satırı koyun: “path_to_visualstudio/VC/bin/vcvars32.bat” çağrısını yapın
  3. Başka bir satır ekleyin: cd.. ve dosyayı kaydedin
  4. Tarayıcılarınızı başlatma ve kaldırma

Lua'yı yükledim. Erişim

Lua yıldızlarını önceden başlatabilmeniz için onları %PATH%'e eklemeniz (onlara gitmeniz) gerekir. Bence siz kendiniz mucizevi bir şekilde nasıl para kazanılacağını biliyorsunuz. Her durumda bu dosyalara ihtiyacımız yok çünkü... Programlarımızın içinde vikorista lua yapmayı planlıyoruz ve programı kapatmaktan hoşlanmıyoruz. Kimden sonra kendinize saygı gösterin Lua'nın kurulumu tamamlandığında, yolu artık Visual Studio'da liba'ya kaydedemezsiniz.

Lua'yı yükledim. Statik bağlama.

Vikorist Lua gibi bir dış görünüm projesiyle lua.dll ile uğraşmak zorunda olanları hariç tutmak benim için özellikle önemli çünkü programlar onsuz çalışmayacak. Ve kokunun devam etmesi için bloğun programımıza statik olarak bağlanması gerekiyor. Fiyatı öğrenmek gerçekten çok kolay:

  1. Visual Studio'nun "LuaLib" adında Win32Project adında yeni bir projesi var
  2. Proje türü "Statik Kitaplık" olarak ayarlanmıştır, Önceden Derlenmiş Başlık onay kutusu etkinleştirilmiştir ve Son'a basılmıştır.
  3. Lua.c ve luac.c dahil tüm dosyalar project.h i.c dosyasına eklenebilir
  4. Derleyicinin bize herhangi bir uyarı göstermemesini sağlamak için proje kurulumuna (Protec/Propreties/Preprocessor);_CRT_SECURE_NO_WARNINGS ekliyoruz (bunu hem sürüm hem de hata ayıklama sürümü için oluşturmayı unutmayın!!!)
  5. Yapılandırılmış bağlantılarda (Proje/Özellikler/Kütüphaneci/Genel/ÇıktıDosyası) istediğiniz kitaplık adlarını belirleyebilirsiniz. Yayınlama için lua.lib'i ve hata ayıklama için lua-debug.lib'i belirttim.
  6. Hata ayıklama ve sürüm sürümlerini derler. İhtiyaçlarımızı ortadan kaldırıyoruz
  7. Onlara verilen talimatları Visual Studio'ya kaydediyoruz

Lua'yı yükledim. Yeniden doğrulama.

Her şeyin çalışıp çalışmadığını kontrol edelim. Yeni bir proje oluşturuyorum (Win32 konsol projesi oluşturdum). Lua katkılarını ekleyelim:

Ve main()'ın kendisi genişletildi:

int _tmain(int argc, _TCHAR* argv ) ( lua_State * L; L = lua_open() ; // Bir yığın oluşturma luaL_openlibs(L) ; //standart kütüphaneleri bağlayın int durumu = luaL_loadfile(L, "test.lua"); //dosyanın sahibi /* Duruş: [-1]ana<--top of the stack */ if (durum) ((void) fprintf (stderr, "dosya bulunamadı) \N"); 1'i döndür; ) int sonuç = lua_pcall(L, 0, LUA_MULTRET, 0); _getch(); 0 değerini döndür; )

Bağlayıcıyı ayarlarken (Proje/Özellikler/Bağlayıcı/Giriş/Ekleme Bağımlılıkları), kitaplığımızı eklemeyi unutmayın (sürüm için lua.lib ve hata ayıklama için lua-debug.lib). Derlenebilir. Lua betiğiyle bir test dosyası oluşturuyoruz.

Lua'mın senaryosunu yaz

Lua dilinde yazılmış olan senaryonun sizin kehanetiniz ile başlayacak herhangi bir özel işlevi yoktur. Bir komut dosyası, ilk talimatla başlayan bir dizi komut (talimat) olarak basitçe görülebilir.

Betik tek bir komuttan oluşacak kadar basit olabileceği gibi onlarca, yüzlerce, binlerce talimatı barındırabilecek kadar karmaşık da olabilir. Adım adım talimatlar bir nokta (;) ile ayrılabilir. Ancak bu zorunlu olmayabilir, dolayısıyla aşağıdaki kodun tamamı sözdizimi açısından doğrudur:

Lua'daki değişikliklerle çalışma

Komut dosyası işleminin değerini kaydetmek için değişiklikler yapılır.

Lua'daki minyonların isimleri

Lua değişkenlerinin adları (tanımlayıcıları) herhangi bir harf, sayı dizisi ve sayıyla başlamayan sandalye sembolü olabilir.

Saygıyı yeniden kazan

Lua dili karakter kayıtlarını ayırır, dolayısıyla abc, abc ve ABC farklı adlara sahiptir.

Tablonun alt kısmında Lua'm tarafından ayrılmış ve isimlerde değiştirilemeyen kelimeler var:

ve break do elseif

if fonksiyonu için end false

yerel olarak sıfır değil veya

return'ü tekrarlayın, ardından true olana kadar

Ayrıca, bir birikim simgesiyle başlayan ve ardından büyük harflerle gelen tüm adlar (örneğin, _VERSION) da saklıdır.

Lua'da ne gibi değişiklikler var?

Lua'daki değişiklikler küresel veya yerel olabilir. Değişim yerel olarak kabul edilmediği için küresel olarak saygı görüyor.

Lua'daki küresel değişiklikler

Küresel değişim, ilk değerinin atandığı anda ortaya çıkar. İlk değer verilene kadar global değişimdeki değişim sıfır verir.

MsgBox(tostring(g)) --> sıfır

MsgBox(tostring(g)) --> 1

Genel değişiklik, betiğin ortası aktif olana kadar aktiftir ve bu orta kısımda yerleşik olan herhangi bir Lua kodu tarafından kullanılabilir.

Gerekirse, değerini sıfır olarak ayarlayarak genel değeri açıkça silebilirsiniz.

g = 1 - 1 değerlerine dayalı olarak g için genel bir değişiklik oluşturun

g = sıfır - g genel değeri görünür

MsgBox(tostring(g)) --> sıfır

Tüm global değişiklikler, global tablo adı verilen orijinal tablonun alanlarıdır. Bu tabloya genel değişiklik _G aracılığıyla ulaşılabilir. Küresel keskinleştirmenin alanları tüm küresel değişiklikleri (_G dahil) içerdiğinden, o zaman _G._G == _G.

Yerel Lua değişiklikleri

Yerel anahtar kelimesini aramak için yerel değişikliklerin suçlanıp suçlanmayacağı. Bir komut dosyası kullanarak yerel değişikliği seslendirebilirsiniz. Ödül, değiştirilebilir koçan değerinin tahsisini içerebilir. Hiçbir anlam verilmemişse, sıfırı değiştirin.

yerel a - sesli yerel değişiklik a

yerel b = 1 - yerel değişiklik b duyurulur ve ona 1 değeri atanır

yerel c, d = 2, 3 - yerel c ve d değişiklikleri, onlara 2 ve 3 değerlerini verin

Lokal değişikliğin görünürlük alanı şoktan sonra başlar ve bloğun geri kalanını kapsar.

Not

Bir değişikliğin görünürlük alanı, program kodunun o değişiklikte saklanan değere erişebileceğiniz bölümüdür.

Bloğun altında şunu kastediyoruz:

yapının gövdesi (if-then, else, for, while, Repeat);

fonksiyon gövdesi;

do...end anahtar sözcüklerini içeren kod parçası.

Herhangi bir bloğun konumuna yerel bir değişiklik atanırsa, görünürlük alanı betiğin geri kalanı için genişler.

local i = 1 – i değişikliği betik içinde yereldir

ben iken<= a do - цикл от 1 до 5

local a = i^2 - while döngüsünün ortasında değişken ve yerel

MsgBox(a) --> 1, 4, 9, 16, 25

MsgBox(a) -->

eğer i > 5 ise o zaman

local a - değişiklik ve yerel o zaman ortada

MsgBox(a) --> 10

MsgBox(a) --> 5 (burada global a'ya ölçekleniyor)

yerel a = 20 - değiştirilebilir ve orta uçta yerel

MsgBox(a) --> 20

MsgBox(a) --> 5 (burada global a'ya ölçekleniyor)

Saygıyı yeniden kazan

Mümkünse global değişiklikler yerine yerel değişikliklerin kullanılması önerilir. Küresel ad alanının ortadan kalkmasına izin vermek üretkenliğin artmasını sağlayacaktır (Lua'da yerel değişkenlere erişim giderek küresel değişkenlerle sınırlanmaktadır).

Tip verileri Lua

Lua dili ne tür verileri destekler?

Lua aşağıdaki veri türlerini destekler:

1. Sıfır (hiçbir şey). Değiştirilebilir değerin varlığını gösterir. Tek değerler için bu tür gösterim sıfırdır.

2. Boolean (mantıksal). Bu tür, yanlış (saçma) ve doğru (gerçek) değerlerini içerir.

Tüm mantıksal işlemler için sıfır değeri yanlış olarak değerlendirilir. 0 sayısı ve boş satır da dahil olmak üzere diğer tüm değerler doğru olarak kabul edilir.

3. Numara. Sayısal değerlerin bir tezahürü olarak hizmet edin.

Sayısal sabitlerde, "e" veya "E" simgeleriyle belirtilen, bağlayıcı olmayan bir kesirli kesir ve bağlayıcı olmayan onuncu sırayı belirtebilirsiniz. Tamsayı sayısal sabitler, 0x öneki kullanılarak onaltılık sistemde belirtilebilir.

Lütfen geçerli sayısal sabitler sağlayın: 3, 3,0, 3,1415926, 314,16e-2, 0xff.

4. Dize (satır). Satırları dosyalamak için servis yapın.

String değerleri, tek veya çift bacaklara yerleştirilen karakterlerin sırasına bakılarak belirtilir:

a = "sıra"

b = "bu başka bir satır"

Katlanır ayaklara yerleştirilen sıralar, “\” (ters eğik çizgi) sembolüyle başlayan kontrol amaçlı C benzeri diziler (kaçış dizileri) olarak yorumlanabilir:

\b (boşluk),

\n (satır kaydırma),

\r (taşıma dönüşü);

\t (yatay tablolama),

(tersine çevrilebilir eğik çizgi);

"" (ayak);

(tek ayak).

Saygıyı yeniden kazan

Bir satırdaki bir karakter, ek bir kaçış dizisi kullanılarak kendi koduyla da temsil edilebilir:

de ddd - dizi üç rakamdan fazla değil.

Belirlenen sıranın patilerine asılı kare kollar da takılabilir:

Ek kare kolların arkasındaki belirlenmiş satır, tüm kaçış sıralarını göz ardı etmenize olanak tanır, böylece satır tam olarak açıklandığı gibi oluşturulur:

yerel a = [] Lua'da]=]

Bir terim olacak: “Lua'daki satırın değeri []”

5. İşlev. Lua işlevleri değişikliklere yazılabilir, diğer işlevlere parametre olarak aktarılabilir ve yeni eklenen bir işlevin sonucu olarak döndürülebilir.

6. Tablo (tablo). Tablo, alanlar veya tablo öğeleri olarak adlandırılan bir dizi "anahtar" - "değer" çiftidir. Tablo alanlarının anahtarları ve değerleri sıfır dışında herhangi bir türde olabilir. Tabloların sabit bir boyutu yoktur: istediğiniz zaman onlara yeterli sayıda öğe ekleyebilirsiniz.

Rapor - “Lua'da tablo oluşturma” makalesinde

7. Kullanıcı verileri (Koristuvatsk verileri). Є özel bir veri türü. Değerler doğrudan bir Lua betiğinde oluşturulamaz veya değiştirilemez.

Kullanıcı verileri, kullandığınız program tarafından veya S tarafından yazılan kitaplıklarda oluşturulan yeni türleri temsil etmek için kullanılır. Örneğin, CronosPRO için Lua uzantı kitaplıkları, bu türü aşağıdaki gibi nesneleri temsil etmek üzere kullanmak için kullanılır:

haraç bankaları (Banka sınıfı);

temel veriler (Base sınıfı);

kayıtları (sınıf Kaydı) daha sonra.

8. Konu. Vikonannya akışı takip ediyor. Bu iş parçacıkları hiçbir şekilde işletim sistemiyle bağlantılı değildir ve Lua'nın kendi özellikleri tarafından kapsamlı bir şekilde desteklenir.

Lua'da değişiklik türünü nasıl ayarlarsınız?

Lua, açık verileri değişiklik türüne aktarmaz. Değişiklik türü, değişiklik değerinin atandığı anda ayarlanır. Herhangi bir değişikliğe herhangi bir türe değer atanabilir (daha önce hangi türün değerine atandığına bakılmaksızın).

a = 123 – a'nın tür numarasını değiştirin

a = "123" - artık tür string olarak değiştirildi

a = true – artık tür booleandır

a = () - şimdi tür tablosu değiştirildi

Saygıyı yeniden kazan

Tablo, işlev, iş parçacığı ve kullanıcı verisi türlerinde yapılan değişiklikler, verileri depolamaz ancak mesajları diğer nesnelere kaydeder. Verildiklerinde, argüman olarak bir fonksiyona iletildiklerinde ve nesnelerin kopyalanması sonucu bir fonksiyondan döndürüldüklerinde kopyalanmazlar, sadece onlara gönderilen mesajlar kopyalanır.

a = () – tablo oluşturma. Masayı değiştireceğim

b = a - a ile aynı tabloyu kullanmak için b'yi değiştirin

a = 10 - indeksi 1 olan tablo öğesine 10 değeri atanır

MsgBox(b) --> "10"

MsgBox(a) --> "20"

Diğer veriler medyan olmayan değerlere sahiptir.

MsgBox(a) --> "20"

MsgBox(b) --> "10"

Lua'daki değişiklik türünü nasıl belirleyebilirsiniz?

Değişiklik tarafından kaydedilen değerin türü, ek standart işlev türü kullanılarak belirtilebilir. Bu işlev, satırı türün adıyla ("nil", "number", "string", "boolean", "table", "function", "thread", "userdata") eşleşecek şekilde döndürür.

t = type (“string”) - t і “string”

t = tür (123) - t eski "sayı"

t = tür (tür) - t eski "işlev"

t = type (true) - t eski "boolean"dır

t = type (nil) - t eski "nil"dir

t = type (CroApp.GetBank()) - t eski "kullanıcı verileri"

Lua'daki değişiklik türünü nasıl değiştirebilirsiniz?

Lua, sayıları gerektiği gibi otomatik olarak satırlara ve desenlere dönüştürür. Örneğin, bir seri değeri bir aritmetik işlemde işlenen ise sayıya dönüştürülür. Oraya yerleşen, sıra halinde bittiği yerde aynı sayısal değer, sıra haline dönüştürülecektir.

a = "10" + 2 - a, 12'ye eşittir

a = "10" + 2 - a, "10 + 2"ye benzer

a = "-5.3e-10"*"2" - a daha eski -1.06e-09

a = “satır” + 2 – Pomilka! "Satırı" bir sayıyla değiştirmek imkansızdır

Herhangi bir türdeki değerler, standart tostring işlevi kullanılarak açıkça bir satıra dönüştürülebilir.

a = tostring(10) - a eski “10”dur

a = tostring (true) - a eski "true"dur

a = tostring (nil) - a yalnızca "nil"dir

a = tostring (( = "bu alan 1")) - a "tablo: 06DB1058"den daha eski

Ön kısımdan, tablo yerine string fonksiyonunun yeniden yaratılmadığını görebilirsiniz. Bu, ek oluşturma işlevi kullanılarak yeniden oluşturulabilir.

a = render (10) - a, "10" ile aynıdır

a = oluştur (true) - a eski "true"dur

a = render (nil) - a yalnızca “nil”dir

a = render (( = "bu alan 1")) - a one "( = "bu alan 1")"

Bir sayının değerini açıkça değiştirmek için standart tonember işlevini kullanabilirsiniz. Değer bir sayıya (veya hatta bir sayıya) dönüştürülebilecek bir satırdaysa, işlev dönüşümün sonucunu döndürür, aksi takdirde sıfır döndürür.

a = ton (“10”) - a eski “10”dur

a = tonumber("10"..".5") - a 10,5'ten eskidir

a = ton (doğru) - a eski "sıfır"dır

a = tonumber (nil) - a eski "nil"dir

Yorumları Lua'da yayınlama

Bir Lua yorumu iki eksi işaretiyle (--) başlar ve satırın sonuna kadar devam eder.

local a = 1 - tek satırlık yorum

“--” sembollerinin hemen ardından açılan iki kare kol ([[) bulunduğundan, yorum çok sıralıdır ve iki kapanış kare koluna (]] kadar gider.

yerel a = 1 - [[ zengin sıra

Yorum ]]

Yorumların menteşeli kolları girintili olabilir. Karıştırmamak için kolların arasına eşitlik işareti (=) konur:

yerel a = [[Kronos Şirketi]] - [=[

yerel a = [[Kronos Şirketi]]

"=" sembollerinin sayısı iç içe geçme anlamına gelir:

local a = [=[Lua dilinde satırın değeri []]=] --[==[

local a = [=[Lua dilinde satırın değeri []]=]

Lua'da yaygın olan işlemler

Lua'da yazılan virüsler aşağıdaki işlem türlerini gerçekleştirebilir:

1. Aritmetik işlemler.

Lua aşağıdaki aritmetik işlemleri destekler:

+ (addavannya);

- (vіdnіmannya);

* (çarpma işlemi);

/ (Podil);

^ (adımlarda zvedenya);

% (bölüm başına fazlalık).

Saygıyı yeniden kazan

Aritmetik işlemler, hem sayılara hem de her zaman sayılara dönüştürülen serilere kadar sabittir.

2. Tesviye işlemleri.

Lua'da değerleri eşitlemek için aşağıdaki işlemlere izin verilir:

== (Rivno);

~= (Karşılaştırma yapmayın);

< (меньше);

> (Daha fazla);

<= (меньше или равно);

>= (birden fazla).

Saygıyı yeniden kazan

Eşitleme işlemleri öncelikle doğru ve yanlışın mantıksal değerlerini döndürür.

Satırdaki sayıları yeniden düzenleme kuralları (ve aynı şekilde) ayarlama sırasında geçerli değildir, dolayısıyla "0" == 0 ifadesi yanlış sonuç verir.

3. Mantıksal işlemler.

Mantıksal işlemlerden önce:

ve (daha mantıklı olarak ben).

And işlemi, false ve nil değerlerine sahip olduğundan ilk işlenenini döndürür. Diğer durumda, işlem başka bir işleneni döndürür (ve bu işlenen aynı türde olabilir).

a = (sıfır ve 5) - a eski sıfırdır

a == (yanlış ve 5) - a yanlıştır

a == (4 ve 5) - a 5'ten büyüktür

veya (ASG'den daha mantıklı).

Veya işlemi, yanlış veya sıfır değilse ilk işleneni döndürür, aksi halde diğer işleneni döndürür.

a == (4 veya 5) - a 4'ten fazladır

a == (yanlış veya 5) - a 5'ten fazladır

Saygıyı yeniden kazan

Mantıksal işlemler ve her türden değerleri döndürebilir.

Mantıksal işlemler ve/veya başka bir işlenenin değerini, nasıl döndürüldüğüne bağlı olarak hesaplar. Eğer bu gerekli değilse diğer işlenen değerlendirilmez. Örneğin:

a == (4 veya f()) - f() işlevi çağrılmayacak

değil (daha mantıklı olarak DEĞİL).

İşlem hiçbir zaman doğru ya da yanlışa dönüşmez.

4. Birleştirme işlemi.

Satırları birleştirmek (birleştirmek) için işlemi (iki nokta) kullanın.

a = “Kronos.”-”..“Bilgi” - değişiklik a, “Kronos-Bilgi” değerini kaldırır

Saygıyı yeniden kazan

Bir veya iki işlenen sayı ise satırlara dönüştürülür.

a = 0..1 – a değerini değiştirirseniz “01” değeri çıkarılır

5. Katlama işlemi.

Lua'nın bir dovzhin işlemi # var, dolayısıyla onu dovzhin satırını kaldırmak için kullanabilirsiniz.

a = "satır"

len = #a - len 6'dan büyük

len = #“daha ​​fazla satır” - len 10

Saygıyı yeniden kazan

Dizinin maksimum indeksini (veya boyutunu) belirlemek için ek bir işlem # kullanılabilir. Rapor “Lua'da Dizilerle Çalışmak” makalesinden alınmıştır.

Lua'da operasyon önceliği

Lua versiyonunda her işlem mevcut önceliğe göre (değişim sırasına göre) gerçekleştirilir:

2. # değil - (tekli)

6. < > <= >= ~= ==

Formlardaki komut dosyalarına tıklayın

Her formda (form ekleri dahil), bu formun ve öğelerinin işlenmesiyle sonuçlanacak işlevleri içermesi amaçlanan, birbiriyle ilişkili bir komut dosyası vardır.

Form başlatıldığında, betiği ışıktan indirilir. Bir öğenin her biçimi için sistem, karşılık gelen işleyici işlevini çağırır.

Form betiği, modül işlevine yapılan çağrıya müdahale etmek istemese de aslında bir modüldür. Bu, yerel anahtar sözcük olmadan komut dosyası formunda eksik olan değişikliklerin genel tanımdan etkilenmediği ve yalnızca komut dosyasının ortasında mevcut olduğu anlamına gelir. Herhangi bir değeri diğer formlardaki komut dosyalarına erişilebilir hale getirmek gerekiyorsa, bu iz global tablo _G'de açıkça görülebilir:

yerel a = _G.var

Operatör blokları (talimatlar)

Başlıca Lua operatörleri şunlardır:

gösterişçilik;

zihinsel operatör;

Döngülerin organizasyonundaki operatörler.

Ek bir tasarım amacı için bir grup operatör bir blok (depo operatörü) halinde birleştirilebilir.

yap - koçanı bloğu

<оператор1>- vücut bloğu

<оператор2>

<операторN>

end - bloğun sonu

Blok, yerel değişikliklerin yapılabileceği yeni bir görünürlük alanı açar.

a = 5 - küresel değer a

yerel a = 20 - do-end'in ortasında yerel değer gösterilir

MsgBox(a) --> 20

MsgBox(a) --> 5 (burada global a'ya ölçeklendirilmiştir)

Lua'da atama operatörü

Bu, değişken veya tablo alanlarının değerlerini değiştirir. En basit haliyle dikkat şu şekilde görünebilir:

a = 1 - a değişkenine 1 değeri verilir

a = b + c - a değişkeni, b ve c değişkenlerinin toplam değerine atanır

a = f(x) - a değişkenine f(x) fonksiyonu tarafından döndürülen bir değer atanır

Lua, atama operatörü altında bulunabilecek bir takım değişiklikler olduğu sürece çoklu atamaya izin verir ve atama operatörü altında yazılan ifade sayısının değerleri kaldırılabilir:

a, b = 1,5 * c - a 1'den fazladır; b daha pahalı 5*c

Değişimin değeri alt değerden büyükse değişim sıfır olarak verilir.

a, b, c = 1, 2 - a, 1'den fazladır; b daha pahalı 2; c bir sıfır

Anlam daha büyük, daha az değişken ise “zaiv” anlamları göz ardı edilir.

a, b = 1, 2, 3 - a, 1'den fazladır; b daha pahalı 2; değer 3 vikoristan değil

Değişkenler arasında değer alışverişinde bulunmak için birden fazla atama kullanılabilir:

bir = 10; b = 20 - a 10'dan büyük, b 20'den büyük

a, b = b, a - şimdi a 20'den büyük, b 10'dan büyük

Lua'nın zihinsel operatörü (eğer)

If ifadesi belirli bir zihnin doğruluğunu doğrular. Nitekim kodun Then anahtar kelimesinden sonra gelen kısmı (then bölümü) bitiyor. Aksi takdirde else anahtar sözcüğünden sonra gelen kod eklenir (else bölümü).

eğer a > b ise

a'yı döndür – a, b'den büyükse a'yı döndür

b'yi döndür - aksi takdirde - b'yi döndür

Diğer bölümü gereksizdir.

Eğer bir< 0 then

a = 0 - eğer a 0'dan küçükse 0 değerini atayın

İç içe if ifadelerini elseif yapısıyla değiştirebilirsiniz. Örneğin, hedefleme kodu:

Bunu aşağıdakiyle değiştirirsek anlaşılması daha kolay olacaktır:

“Ivan”ı döndür - a'nın 1 ile ilişkili olduğu gibi

elseif a == 2 o zaman

“Petro” yu döndür - jakscho a dorіvnuє 2

elseif a == 3 o zaman

“Sergiy” i döndür - eski bir 3 gibi

"Böyle daha ciddi bir şey yok" - yakscho a - çoğunlukla

Lua'nın while döngüsü

While operatörü, geçişli döngüleri düzenlemek için kullanılır ve aşağıdaki formu alır:

sırasında Yapmak

… - döngünün gövdesi

Cilt yineleme döngüsünden önce zihin kontrol edilir :

Sonuç olarak döngü sona erer ve sıra while operatöründen sonra gelen ilk operatöre aktarılır;

Zihin doğru olduğu için vücut döngüyü tamamlar ve ardından tüm eylemler tekrarlanır.

i > 0 iken - 10'dan 1'e geçiş yapın

t[i] = "alan" ..i

bir = (3, 5, 8, -6, 5)

i > 0 iken - dizi negatif değerlere sahip

eğer bir[i]< 0 then break end - если найдено, прерываем цикл

i = i - 1 - aksi halde ilerleyen elemana gideriz

eğer i > 0 ise o zaman

MsgBox("Negatif değer dizini: "..i)

MsgBox ("Dizi negatif değerleri kaldırmaz")

Not

Lua'da postumova ile döngü (tekrar)

Sipariş sonrası işleviyle döngüleri organize etmek için tekrarlama operatörü şuna benzer:

… - döngünün gövdesi

değin

Döngünün gövdesi zihnin doki'si olan doti ile biter Bunu halledemeyeceğim. Zihnin tersine çevrilmesi, bedenin döngüyü tamamlamasından sonra gerçekleşir, dolayısıyla her durumda bedenin en az bir kez tamamlanması gerekir.

A dizisinin değeri varsayılır, toplam 10'dan fazla ağırlıklandırılamaz

bir = (3, 2, 5, 7, 9)

toplam = toplam + a[i]

toplam > 10'a kadar

MsgBox ("Yığılmış"..i.." öğeleri. Toplam "..sum")

Döngüyü tamamlamadan çıkmak için break deyimini kullanabilirsiniz.

Not

Mola operatörünün özellikleri hakkında rapor - “Mola ve dönüş operatörleri” makalesinde

Lua'da for operatörüyle döngüler

For operatörü döngüleri düzenlemek için kullanılır ve iki gösterim biçimine izin verir:

basit (sayısal);

genişletilmiş (evrensel için).

For ifadesinin basit bir formu

Operatörün basit bir formu şuna benzer:

var = exp1, exp2, exp3 için do

… - döngünün gövdesi

Tüm döngü, exp1'den exp2'ye ve ardından exp3'e kadar olan aralıktaki değişim döngüsünün (ilaç) var olan cilt değeri için hesaplanır.

Not

Croc rahatsız edilemez. Ve burada vin 1'e eşit olarak alınır.

i = 1 için, 10 do - döngü 1 ile 1'den 10'a döngü

MsgBox("ben bir"..i)

i = 10, 1, -1 için do - -1 döngüsüyle 10'dan 1'e geçiş yapın

MsgBox("ben bir"..i)

Saygıyı yeniden kazan

exp1, exp2 ve exp3 ifadeleri döngünün başlangıcından önce yalnızca bir kez hesaplanır. Dolayısıyla, aşağıdaki uygulamada döngünün üst sınırını hesaplamak için f(x) fonksiyonu yalnızca bir kez çağrılacaktır:

i = 1 için, f(x) do - 1'den f() fonksiyonu tarafından döndürülen değere geçiş yapın

MsgBox("ben bir"..i)

Döngüde yapılan değişiklik döngü operatöründe yereldir ve tamamlandıktan sonra atanmaz.

i = 1, 10 için do - 1'den f() işlevi tarafından döndürülen değere geçiş yapın

MsgBox("ben bir"..i)

MsgBox (“i döngüsünden çıktıktan sonra bir şey var.”.i) - Yanlış! ben bir sıfır

Saygıyı yeniden kazan

Değişim döngüsü değerleri döngünün ortasında değiştirilemez: bu tür değişikliklerin etkileri aktarılmaz.

Döngü tamamlanmadan çıkmak için break ifadesi kullanılır.

bir = (3, 5, 8, -6, 5)

for i = 1,#a do - dizideki negatif değerleri arayın

eğer bir[i]< 0 then - если найдено...

index = i - bulunan değerin indeksi kaydedilir.

ara - ve döngü kesintiye uğrar

MsgBox("Negatif değer dizini: "..index)

Not

Mola operatörünün özellikleri hakkında rapor - “Mola ve dönüş operatörleri” makalesinde)

Lua, C++ dilinde derlenen uygulamaların komut dosyalarını oluşturmak için kullanılabilecek bir araç olan yazma konusunda ün kazandı. Aynı zamanda Lua, kendi tercümanına, modül oluşturma yeteneğine, çok sayıda kütüphaneye sahip ve dilin analogları arasında minimum boyuta sahip olması nedeniyle tamamen bağımsız bir dildir. Basitçe söylemek gerekirse Perl, Python ve diğer gelişmiş programlamalardaki programların aynısını oluşturmak için her şeye sahibiz.

Size Lua hakkında bazı temel argümanlar sunabilirim:

  • - programlar Windows ve Linux arasında kolayca taşınabilir olacak (kodun değişiklik yapılmadan çalışacağı bir gerçek değil, ancak platforma özel kütüphaneler olmadığı için taşıma aslında ağrısız bir şekilde gerçekleşecek)
  • - çalışan programların düşük yükü
  • - yüksek çalışma hızı ve aksesuarların bulunabilirliği
  • - ister C-kütüphanesi olsun, programınıza hızlı bir şekilde "yapıştırma" yeteneği - kütüphaneler için daha iyi bir "yapıştırıcı" bulamazsınız
  • - yeni güncel programlama paradigmalarına uygulama imkanı ile kabul edilebilir minimalist dil sözdizimi
  • - Lua'daki programların öğrenilmesi çok kolaydır
  • - az hafıza kaybı

Lua'nın gücünü göstermek için, size, grafikleri bir görüntü dosyası görünümünde kaydedebilmeniz amacıyla noktadan noktaya grafikler oluşturmak için küçük bir program oluşturmak üzere onu nasıl kullanacağınızı göstereceğim.

Grafiksel bir araç seti olarak, baştan Lua'nın Vikorist sürümüyle oluşturulmuş çapraz platform kütüphanesi iup'ı kullanacağız.

Lua SDK'yı yükleme
Lua'yı bağımsız bir dil olarak geliştirme fikrinin bir parçası olarak, günlük işlerde gerekli olan ve belirli bir işletim sistemi (veritabanı robotları, GUI, XML) altında programlandığında çöken kitaplıkları içeren Windows için bir Lua derlemesi oluşturuldu. ayrıştırma vb. Koleksiyondaki Lua sürümünün 5.2 değil 5.1 olduğunu söyleyerek sizi azarlamama izin vermeyin; bizim sürümümüzde aralarında özel bir fark yoktur.

Katlanır olanı taktığınızdan emin olun.

iup konseptinin kısa açıklaması
Uzun süre iup cihazına girmeden program oluşturma sürecini nasıl anlatacağımı düşündüm. Başlıca pusularını kısaca anlatmak isterim:
  • - iup.dialog, program arayüzünün kök öğesidir - içinde tüm öğelerin bulunduğu kapsayıcı
  • - Bir kaptaki elemanların konumlandırılması ek düzenlere bağlıdır: bir elemanın bir kaba yerleştirilmesine ilişkin kuralların belirlenmesi. Iup'ın kendisi, öğeyi kurallara göre görüntülemenize izin verecektir. Ana kaplar çerçeve, dikey ebatlayıcı, yatay ebatlayıcıdır.
  • - widget'a eklenen işlevlerin türü için açıklamalar belirtilir
  • - diyalog açıldıktan sonra işlem döngüsü başlar
Daha önce Tk, WxWidgets veya WinAPI gibi GUI'ler için yazdıysanız burada her şeyi biliyoruz. Ancak program açıkça yorumlarla kaplıdır.
Program kodu

Kitaplık bağlantıları iup require("iuplua") require("iupluacontrols") require("iuplua_pplot") - grafikleri bir dosyaya kaydetmek için Canvas ile çalışmaya yönelik bir kitaplık require("cdlua") require("iupluacd") require("string " ) -- widget'lar ve programların özelleştirilmesi için genel değişiklikler -- maksimum grafik sayısı çizim_numarası = 5 -- dış görünüm grafiği için veri girişi widget'larını barındıracak sekme widget'ları sekmeler = () -- seçtiğiniz widget'lar için kaplar hangi grafikler onay kutularına sahip olacak = ( ) - burada noktalar hakkındaki veri metnini içeren widget'ları kaydediyoruz coords = () - Lua'daki dış görünüm grafiği için widget'ların başlığı standart bir fonksiyona sahip değildir bölme işlevi string:split(sep) local sep, fields = sep veya " :", () local model = string.format("([^%s]+)", sep) self:gsub (pattern, function(c) alanlar[#fields+1] = c end) dönüş alanları end - - fonksiyon çizici üzerinde noktaları gösteren bir grafik çizer function Draw_plot(pwidget, pnum, data) x = data.value:split(", ") y = data.value:split("), eğer checkboxes.value = = "KAPALI" then return end if not (#x == #y) or #x == 0 then iup.Message("Ошибка", "Задано неверное число точек для графика " .. pnum) return end iup.PPlotBegin(pwidget, 0) iup.PPlotAdd(pwidget, 0, 0) for i = 1,#x do iup.PPlotAdd(pwidget, x[i], y[i]) end iup.PPlotEnd(pwidget) end -- виджет отвечающий за кнопку построения графика plot_btn = iup.button{ title = "kalmak"} -- колбэк для кнопки "построить график" function plot_btn:action() -- создать виджет графопостроителя plot = iup.pplot { expand="YES", TITLE = "Basit Çizgi", MARGINBOTTOM="65", MARGINLEFT="65", AXS_XLABEL = global_legend.value, AXS_YLABEL = global_legend.value, LEGENDSHOW="YES", LEGENDPOS="TOPLEFT", size = "400x300" } -- этот блок для обхода бага - без него подпись к первому графику отображаться не будет iup.PPlotBegin(plot, 0) iup.PPlotAdd(plot,0,0) plot.DS_LEGEND = "" iup.PPlotEnd(plot) -- обходим виджеты с данными for i = 1, plots_number do -- чтобы свеженарисованный графи отобразился с правильной подписью print(legends[i].value) plot.DS_LEGEND = legends[i].value -- рисуем график draw_plot(plot, i, coords[i]) end -- кнопка сохранения графика в картинку на диске save_btn = iup.button{ title = "Kaydetmek" } -- теперь создаем само окно, где будет отображаться график plot_dg = iup.dialog { iup.vbox -- это вертикальный сайзер, помести в него графопостроитель и кнопку { plot, save_btn }, } -- обработчик кнопки сохранения графика function save_btn:action() -- создаем диалог выбора имени файла ля сохранения -- в связи с ограничениями библиотеки сохранять можно только в EMF fs_dlg = iup.filedlg{DIALOGTYPE = "SAVE", FILTER = "*.emf" } iup.Popup(fs_dlg) -- если файл выбран if tonumber(fs_dlg.STATUS) >= 0 then -- дописать при необходимости нужное расширение pic = fs_dlg.value if not (string.sub(pic, string.len(pic)-3) == ".emf") then pic = pic .. ".emf" end -- создаем псевдо-холст, ассоциированный с файлом tmp_cv = cd.CreateCanvas(cd.EMF, pic .. " 400x300") -- выводим график на холст iup.PPlotPaintTo(plot, tmp_cv) -- сохраняем данные в файл cd.KillCanvas(tmp_cv) end end -- отображаем диалог с графиком plot_dg:showxy(iup.CENTER, iup.CENTER) -- запускаем петлю обработки событий для диалога if (iup.MainLoopLevel()==0) then iup.MainLoop() end end -- в цикле создаем вкладки, в которых мы будем размещать виджеты -- для сбора данных for i=1,plots_number do -- создание текстовых виджетов, куда будут вводиться координаты точек coords[i] = {} for j = 1,2 do coords[i][j] = iup.text { expand="HORIZONTAL", multiline = "YES", VISIBLELINES = 5 } end -- виджет для редактирования подписи к графику legends[i] = iup.text{ expand = "HORIZONTAL" } -- создаем контейнер вкладки и заполняем его элементами vboxes[i] = iup.vbox { iup.hbox { iup.label { title = "Grafik başlığı:" }, legends[i] }, iup.hbox { iup.label { title="X:", }, coords[i] }, iup.hbox { iup.label { title="Y:", }, coords[i] }; expand="YES", } -- меняем заголовк вкладки vboxes[i].tabtitle = "Takvim" .. i -- создаем чекбокс, который будет указывать на то, нужно ли строить -- график по данным из указанной вкладки checkboxes[i] = iup.toggle{ title= "Takvim" .. i, value = "AÇIK" } end -- теперь из заполненных нами контейнеров создаем вкладки tabs = iup.tabs{unpack(vboxes)} -- создаем текстовые виджеты для редактирования подписей осей global_legend = iup.text{} global_legend = iup.text{} -- создаем фрейм для общих настроек графика frame = iup.frame { iup.vbox { iup.label{ title="Wikiristat verileri:", expand="HORIZONTAL" }, iup.vbox { unpack(checkboxes) }, iup.label{}, -- пустую подпись можно использовать как распорку iup.label{title = "İmzalar"}, iup.hbox { iup.label{ title = "Tüm X"}, global_legend }, iup.hbox { iup.label{ title = "Müttefik"}, global_legend }, iup.label{}, plot_btn }; expand = "VERTICAL", } -- создаем главное окно программы и наносим на него настройки и табы dg = iup.dialog { iup.hbox { frame, tabs }, title="Bir programımız olacak", size = "HALF" } -- показываем главное окно и запускаем обработку событий dg:showxy(iup.CENTER, iup.CENTER) if (iup.MainLoopLevel()==0) then iup.MainLoop() end !}!}

Boğaz hakkında birkaç kelime
Komut dosyası aşağıdaki komut kullanılarak çalıştırılabilir:

Lua çizici.exe

Bu tür kitaplık için Lua for Windows'un kurulu olduğu dizinde bulunan clibs/ alt dizinine bağlanın. Komut dosyasını ve kitaplığı başka bir makineye aktarmak üzere mümkün olduğunca kompakt bir şekilde paketlemek için aşağıdaki dosyaları tek bir klasöre kopyalamanız yeterlidir (Lua kurulum dizini altındaki girişlerle gösterilir):

Lua.exe lib/lua5.1.dll clibs/cd.dll clibs/cdlua51.dll clibs/iup.dll clibs/iup_pplot.dll clibs/iupcd.dll clibs/iupcontrols.dll clibs/iupgl.dll clibs/iuplua51.dll clibs/iuplua_pplot51.dll clibs/iupluacd51.dll clibs/iupluacontrols51.dll clibs/freetype6.dll

Komut dosyasını ve programı bu klasöre yerleştirmeyi unutmayın. Artık bu klasörü başka bir makineye aktarabilir ve yukarıda belirtilen komutu kullanarak programınızı çalıştırabilirsiniz. Diğer durumlarda kitaplıkları ve çalışma zamanını yüklemeniz gerekmez.

Ne yazık ki Lua for Windows'un bu sürümündeki cd.dll, cdluad51.dll ve iupcd.dll dosyaları düzgün çalışmayabilir, bu nedenle bunları aşağıda açıklandığı gibi arşivden almanızı öneririm.

Torbalar
App.bat başlatıcısı, referans kolaylığı sağlamak amacıyla çalışma sürümüyle birlikte arşive eklendi.

Ekran görüntüleri:

Sonuç olarak, dürüst olmak gerekirse, benim "ciddi" programım tarafından yazıldığı varsayılanla aynı işlevselliğe sahip bir yardımcı programı ortadan kaldırdılar. Bu durumda boğazın boyutu ve toplam hacim 2 MB'tan azdır. Bellek depolama alanı yaklaşık 7 MB'tır. Çıkış kodu düzenlemeye açıktır, Lua'nın kendisi etkileşimli olarak anlaşılabilir, bu da bu tür yazılımların sitede daha fazla düzenlenmesini kolaylaştıracaktır.

Benim düşünceme göre bu, okullar ve enstitüler için başlangıç ​​yazılımı yazmanın yanı sıra işletmelerdeki iç gelişim için harika bir seçimdir. SND genelinde bu tür yerlerde zayıf makineler hala mevcut olduğundan, Lua'nın benzer şekilde kullanımı, özellikle Linux'un masaüstü bilgisayarlara aşamalı olarak gelmesinden bu yana oldukça sabittir. Buna ek olarak, hafta sonlarını motorlu gelişmişlik ile kendi kendine yazılan yazılımlarla geçirme eğilimi, ulusal pervasızlığa eşit olabilir.

Etiketler: Etiket ekleyin

© 2024 androidas.ru - Android hakkında her şey