Lua - ich (wir) lerne(n)

    • Offizieller Beitrag

    Hi,
    ich hatte peethebee gebeten, ein Unterforum für Lua einzurichten. Als wichtiger Bestandteil von SciTE und sehr mächtige Skriptsprache ist Lua es wert, sich näher damit zu beschäftigen.
    Im Moment bin ich noch recht frisch auf diesem Gebiet. Meine Idee ist, dass ich alles, was ich mir zu Lua aneigne, parallel hier gut kommentiert poste. So können davon auch andere Interessierte profitieren.
    Natürlich ist jeder, der Kenntnisse auf dem Gebiet hat oder mit erwirbt herzlich eingeladen sich hier einzubringen.


    Edit 23.10.2013:
    Nun ist doch "etwas" Zeit ins Land gegangen und ich bin wesentlich weiter als hier sichtbar. ;)
    Also werde ich nun endlich beginnen das hier zu vervollständigen.


    1. Wie kann ich Lua in SciTE ausführen?
    Standardmäßig ging es bei mir nicht. Ich bin, wie folgt vorgegangen:
    - Download Lua 5.1
    - Installation
    - lua.properties ==> Pfad anpassen (am Ende der Datei):
    für "C:\Program Files\Lua\5.1\luac.exe" und "C:\Program Files\Lua\5.1\lua.exe" euren Installationspfad verwenden

    Das war viel zu kompliziert. Die einfachere Methode ist der Zugriff auf das in SciTE eingebundene Lua.
    So gehts:
    In der SciTEUser.properties folgende Einträge vornehmen.

    Code
    command.go.$(file.patterns.lua)=dofile $(FilePath)
    command.go.subsystem.$(file.patterns.lua)=3

    So wird mit "F5" die aktuell in SciTE geöffnete Lua-Datei ausgeführt.


    2. Wo kann ich etwas zu Lua lesen?
    Hilfe im Internet:
    Lua für Anfänger
    Lua 5.1 Reference Manual
    Programming in Lua (first edition)


    Einen zu AutoIt vergleichbaren Syntaxcheck kann ich mit Lua nicht durchführen, da sofort nach Fund des ersten Fehlers die Interpretation abgebrochen wird.
    Ich habe ein kleines Skript geschrieben, das die aktuelle Datei in einem geschützten Prozeß lädt (nicht ausführt) und dabei auftretende Fehler (bzw. den ersten) meldet. Das gebe ich dann in die Konsole aus, wie von AutoIt bekannt:
    + [15:32:56] Syntax-Check <C:\Code_AutoIt\LUA\test.lua>
    > [15:32:56] ------> OK

    oder z.B.
    + [15:35:18] Syntax-Check <C:\Code_AutoIt\LUA\test.lua>
    ! [15:35:18] Line: 701, ERROR: unfinished string near '''


    Ich habe ein Lua-Skript mit einigen SciTE-Tools erstellt, welches beim SciTE-Start geladen wird und aus dem dann u.a. der Syntax-Check aufgerufen wird.
    Man sollte sinnvollerweise für die Lua-Skripte einen eigenen Ordner anlegen ausserhalb der SciTE-Installation. Der SciTE-Lua-Pfad wird bei Updates überschrieben, ist daher wenig geeignet für eigene Skripte.
    Damit dieser Pfad auch überall angesprochen werden kann, empfiehlt sich in der SciTEUser.properties einen Eintrag dafür anzulegen, sieht bei mir so aus:
    #~ Speicherort der Skriptdatei !! ohne abschließendem Backslash !!
    Lua.User.Scripts.Path=C:\Code_AutoIt\LUA

    Beim Starten von SciTE werden alle Properties in ein Array geladen. Darauf kann man in den Lua-Skripten zugreifen mit: Wert = props['Property'], für den Skriptpfad wäre das also: sPath = props["Lua.User.Scripts.Path"]
    Wichtig ist: Alle gespeicherten Werte sind Strings, wenn also Zahlenwerte in Properties gespeichert sind müssen diese beim Einlesen umgewandelt werden (numValue = tonumber(props['Property']))


    Um den Syntax-Check, wie gewohnt mit "Ctrl+F5" aufzurufen sind zwei Dinge erforderlich:
    - Laden der Tools-Datei (Eintrag am Ende der "SciTEStartup.lua": LoadLuaFile("MySciTETools.lua", props["Lua.User.Scripts.Path"] .. "\\") )
    - Eintrag in der "SciTEUser.properties":
    # 36 Syntax Check Lua, if error --> selects error line and makes it visible
    command.name.36.$(file.patterns.lua)=SyntaxCheck Lua
    command.36.$(file.patterns.lua)=dostring MySciTETools:LuaCheck()
    command.mode.36.$(file.patterns.lua)=subsystem:lua,savebefore:yes
    command.shortcut.36.$(file.patterns.lua)=Ctrl+F5



    Nutzung von Bibliotheken
    Lua stellt zum Einbinden von Bibliotheken den Befehl "require" zur Verfügung. Einbinden lassen sich *.dll- und *.lua-Bibliotheken. Damit die Bibliotheken gefunden werden müssen sie im Startup-Skript angemeldet werden, bei mir sieht das so aus:
    local sUserLua = props["Lua.User.Scripts.Path"]


    LUA_USER_PATH = sUserLua .. "\\?.dll;" .. sUserLua .. "\\?\\?.dll;"
    package.cpath = LUA_USER_PATH .. package.cpath


    LUA_USER_LUA = sUserLua .. "\\?.lua;" .. sUserLua .. "\\?\\?.lua;"
    package.path = LUA_USER_LUA .. package.path



    Damit dieser Post nicht unendlich lang wird, erstelle ich weitere Themen als eigene Threads und verlinke hier.


    Bibliotheken in Lua
    Alien und VCLua für SciTE (progandy)
    Objekte in Lua

  • Hi BugFix,
    also ich hab mich noch nie so richtig mit LUA befasst, ich weiß zwar das es in SciTE verwendet wird aber wenn ich das hier in Wikipedia lese komm ich doch gleich auf dem Geschmack.


    Zitat

    Lua-Programme sind meist plattformunabhängig und werden vor der Ausführung in Bytecode übersetzt


    Werd mich auf jeden mal etwas einarbeiten. :thumbup:

  • Sieht nicht sehr schwer aus, zumindest auf Wikipedia.


    Manko was ich so sehe ist, dass if und Funktionen beide mit "end" abgeschlossen werden und ich fürchte das führt zu unübersichtlichkeit bei größeren Scripten.


    Ich würde auch gerne mal wissen wofür das jetzt gut ist, wenns in andere Programme eingebunden werden soll, vielleicht sowas wie Bots, aber dann hätte peethebee sicherlich kein forum dafür eingerichtet, also wofür ist das jetzt gut?


    BugFix: Ich versteh deine Installationsanleitung für lua in scite nicht, ist bei lua kein eigener editor mit syntaxhighlighting dabei?


    DFPWare

    • Offizieller Beitrag

    also wofür ist das jetzt gut?


    Nun, öffne doch einfach mal die Datei "..\AutoIt3\SciTE\Lua\AutoItTools.lua". Und siehe da - dort findest du Tools des täglichen AutoIt-Gebrauchs.
    Ich möchte hier die Möglichkeit eröffnen eigene Tools zu erstellen, die das Skripten in AutoIt noch komfortabler gestalten.
    Darüber hinaus ist LUA eine sehr mächtige Skriptsprache, die m.M. nach in einigen Bereichen AutoIt sogar weit überlegen ist. Und hier seinen Horizont zu erweitern und evtl. mal Lösungen auf andere Art vorzunehmen kann doch nicht schaden.
    (Und wer nicht will, der muß ja nicht.. ;))

    • Offizieller Beitrag

    Ne, ich meine eine Einbindung in AutoIt. Sodass man von AutoIt aus LUA-funktionen aufrufen kann, sowie Funktionen bereitstellen kann.


    Achso, dann hatte ich das mißverstanden.
    Bleibt die Frage, ob die Lua-Skripte, eingebunden in AutoIt, dann auch im kompilierten AutoIt-Skript laufen sollen?
    Also lokales Ausführen ist sicher nicht das Problem. Aber in einem kompilierten Skript? Hab ich mir bisher noch keine Gedanken gemacht.

  • Keine Sorge. Hab schonmal eine Interfaceklasse zum angenehmeren Verwenden in C++ geschrieben.


    Ich bin inzwischen auch soweit, dass ich LUA-skripte ausführen kann und die Funktionen danach aufrufen kann.
    Man muss halt nur die Parameter einzeln auf den Stack pushen.




    Beim Registrieren von AutoIt-funktionen hapert es aber noch.

  • Also ich als Benutzer soll in die Console was reinschreiben und Lua speichert das in eine Variable.


    Bei c++ geht das z.B so


    Code
    cout << "Geben sie irgendwas ein"
    cin >> variable
    cout << variable


    in lua sähe das etwa so aus


    Code
    print("Geben sie irgendwas ein")
    variable = eingabebefehl
    print(variable)


    DFPWare

    • Offizieller Beitrag

    okay io kann aus dateien lesen/schreiben, aber wie soll ich damit jetzt auf die console zugreifen oder consoleread kopieren?=)


    Hast du es überhaupt schon probiert? Ich nehme mal an: Nein - denn sonst würdest du die Fragen gar nicht stellen.
    Auch hier gilt, wie überall: ohne zu wissen, welchen Code du schon getestet hast, kann man dir schlecht helfen. ;)

  • Ich hatte mich schon immer mit LUA befasst, auch deswegen, da es für die Entwicklung von Spielen für die Playstation Portable sehr wichtig ist (neben C++). Ich freu mich über das neue Unteforum, und auf viel Unterstützung:


    MfG, campweb