Benutzer-Werkzeuge

Webseiten-Werkzeuge


becki:linux:lua

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
becki:linux:lua [2015-02-24 13:40]
becki
becki:linux:lua [2023-12-27 13:57] (aktuell)
becki [Classes and Objects]
Zeile 12: Zeile 12:
   * [[http://​lua-users.org/​wiki/​LibrariesAndBindings|Manual]]   * [[http://​lua-users.org/​wiki/​LibrariesAndBindings|Manual]]
  
-===== Standalone lua == +===== Implementations == 
-==== Shebang ==+==== Standalone lua == 
 +=== Shebang ==
  
 ''#​!/​usr/​bin/​lua''​ ''#​!/​usr/​bin/​lua''​
  
-==== Command Line Arguments ==+=== Command Line Arguments ==
  
 Use global table ''​arg''​ Use global table ''​arg''​
  
-==== StdIo ==+=== StdIo ==
  
 <code lua> <code lua>
Zeile 29: Zeile 30:
 io.stderr:​write() ​         -- Print a string to stderr io.stderr:​write() ​         -- Print a string to stderr
 </​code>​ </​code>​
 +
 +==== Lua for Web Browsers ==
 +
 +[[http://​kripken.github.io/​lua.vm.js/​script_example.html|lua.vm.js]] thanks to asm.js
 +
 +==== Lua for Java/​Android ==
 +
 +[[https://​sourceforge.net/​projects/​luaj/​|Luaj]],​ seen at [[https://​github.com/​M66B/​XPrivacyLua/​blob/​master/​README.md|XPrivacyLua]]
  
 ===== C-style ?-operator equivalent == ===== C-style ?-operator equivalent ==
Zeile 45: Zeile 54:
 d1, d2 = table.unpack(a and {b1, b2} or {c1, c2}) d1, d2 = table.unpack(a and {b1, b2} or {c1, c2})
 </​code>​ </​code>​
 +
 +<note warning>​Take care if b can become ''​nil''​ or ''​false''​. In this case the equivalent doesn'​t work. Instead use:</​note>​
 +<code lua>
 +if a then d=b else d=c end
 +</​code>​
 +
 +===== Default values for missing arguments ==
 +
 +<code lua>
 +function foo(a)
 +    a= a or "​defaultvalue"​
 +end
 +</​code>​
 +
 +Take care, if ''​false''​ is a valid value, instead use:
 +
 +<code lua>
 +function foo(a)
 +    if a==nil then a="​defaultvalue"​ end
 +end
 +</​code>​
 +
  
 ===== Difference between nil and no value == ===== Difference between nil and no value ==
Zeile 226: Zeile 257:
  
 ===== Classes and Objects == ===== Classes and Objects ==
 +
 +See also projects/​accounting/​sbaccimport which has since rev 482:​c85c255f1870 classes with inheritance where the constructor new() is a class method and can therefore be reused in child classes similar to PIL capter 21 
 ==== Classes as Object templates == ==== Classes as Object templates ==
 <code lua> <code lua>
Zeile 445: Zeile 478:
 </​code>​ </​code>​
  
 +===== File access ==
 +
 +Each of the following constructs is equivalent, it reads a file line by line:
 +
 +<code lua>
 +local f= io.open"​file.txt"​
 +repeat
 +    local l= f:​read("​l"​)
 +    if l then print(l) end
 +until not l
 +f:close()
 +</​code>​
 +
 +<code lua>
 +local f= io.open"​file.txt"​
 +for l in f:​lines("​l"​) do
 +    print(l)
 +end
 +f:close()
 +</​code>​
 +
 +<code lua>
 +for l in io.lines("​file.txt",​ "​l"​) do
 +    print(l)
 +end
 +</​code>​
 +
 +  - ''"​l"''​ as arg for ''​read()''​ is the default, it can be omitted
 +  - ''​file:​lines()''​ and ''​io.lines()''​ accept the same format args as ''​read()''​. (Tested. Nowhere found in docu). Thus you could read a file eg chunk by chunk as well.
 +  - io.lines() without arguments returns an iterater wich returns stdin line by line
 +
 +==== Load CSV-like files ==
 +
 +<code lua>
 +#​!/​usr/​bin/​lua
 +local separator=":"​
 +for line in io.lines() do
 +    print(line)
 +    for cell in line:​gmatch("​[^"​..separator.."​]+"​) do
 +        print("",​ cell)
 +    end
 +end
 +</​code>​
 ===== Includes and Modules == ===== Includes and Modules ==
 ==== Include == ==== Include ==
becki/linux/lua.1424785202.txt.gz · Zuletzt geändert: 2015-02-24 13:40 von becki

Impressum - Datenschutzerklärung