089 80919779
hello@spielprinzip.com

Funktionen in Lua

von Bernd Fischer am 01.08.2019 in Lua
Funktionen in Lua

In diesem Teil der Einführung in Lua zeigen wir wie immer anhand von Beispielen die grundlegenden Funktionsweisen der Kontrollstrukturen und Funktionsaufrufe. Wie immer verweisen wir für tieferes Verständnis auf die offizielle Lua-Doku.

Im dritten Teil der Lua-Einführung werden wir Tables und Datenstrukturen behandeln. In den folgenden Beiträgen wird es um Errorhandling und um das Entwickeln und Einbinden von einem einfachen C-Modul gehen.

 

Funktionsaufruf mit einem Parametern

Das local Keyword für die Variable file sagt aus, dass der Variablenname nur in diesem Scope gültig ist.Überdies sehen wir hier ein einfaches if-Statement

function openFile(path)
    local file = io.open(path, "rb") -- r read mode and b binary mode
    if not file then return nil end
    return true
end

Umwandeln einer Zahl in einen String mit der toString-Funktion.

--[[
Eine natürliche Zahl wird Münchhausen-Zahl genannt, wenn die Summe ihrer einzelnen mit sich selbst potenzierten Ziffern wieder diese Zahl ergeben.
]]--
local function isMunchhausen(num)
    x = tostring(num) --typecast to string
    local res = 0
     
    for i = 1, #x do
        c = string.sub(x, i, i) --substring (shorthand: x:sub(i,i) )
        res = res + (c+0) ^ (c+0) --implicit type cast to number (int in lua >= 5.3)
    end
 
    return res == num --return boolean
end
 
for i=1, 100000000000 do
    if isMunchhausen(i) then
        print(i)
    end

 

#x: die Länge des Strings
string.sub ist die Substring-Funktion

Einem Table-Key eine Funktion zuweisen

Wir deklarieren eine Variable t mit einem leeren Table. Dann weisen wir dem Table-Key foo eine lambda-Funtion zu, die zwei Werte summiert. Damit lässt sich leicht ein objektorientierter Ansatz entwickeln.

t = {}
t.foo = function (x,y) return x + y end
print(t.foo(3,4)) --call function of table-key with two values

Funktionsaufruf mit zwei Parametern und einfacher for-Schleife

Man beachte die Funktion pairs(), die über den table iteriert und das Keyword local vor der Funktionsdefinition

--[[
das Kartesische Produkt in Lua
 
das kartesische Produkt zweier Mengen ist definiert als die Menge aller Tupel (a,b),
wobei a ein Element aus A und b ein Element aus B ist
A x B := { (a,b) | a ∈ A und b ∈ B }
 
der euklidische Raum ℝ³ beispielsweise besteht aus dem dreifachen kartesischen Produkt
der reellen Zahlen ℝ (Dreier-Tupel)
ℝ x ℝ x ℝ = ℝ³ {(x,y,z) | x ∈ ℝ, y ∈ ℝ, z ∈ ℝ}
 
in Python existiert die Methode:
list(itertools.product((1,2), (3,4)))
]]--
 
-- load inspect (e.g. install with luarocks)
local inspect = require('inspect')
 
-- create cartestian product of two tupels (implemented as lua tables)
-- @param t1 table, first tupel
-- @param t2 table, second tupel
-- @return table cartesian product
local function buildProduct(t1, t2)
    local p = {}
    for x,v1 in pairs(t1) do
         for z,v2 in pairs(t2) do
            t = {v1,v2}
            table.insert(p, t)
         end
    end
    return p
end
 
 
-- build cartesian product of two tupels 1,3 1,4 2,3 2,4
a = {1,2,3}
b = {4,5,6}
result = buildProduct(a,b)
 
-- dump result
print(inspect(result))
 
--[[
Ergebnis:
{ { 1, 3 }, { 1, 4 }, { 1, 8 }, { 2, 3 }, { 2, 4 }, { 2, 8 },
{ 6, 3 }, { 6, 4 }, { 6, 8 } }
]]--

Über den Autor:
Bernd Fischer ist seit 18 Jahren freiberuflicher Web-Entwickler, IT-Berater und Software-Experte. Er gibt immer mal wieder Kurse rund um die Themen Python, Programmierung, Datenbanken und Software-Lösungen.

0 Kommentare

Kommentar schreiben

Vielen Dank für Ihren Kommentar! Zur Zeit prüfen wir ihn, und schalten ihn später frei!

DSGVO CHECK

ab 70,- €

  • Cookie Check
  • Karten Check
  • Font Check
  • Captcha Check
  • Affiliate Check

* Hinweis: Spielprinzip ist keine Rechtsanwaltskanzlei! Wir geben keine Gewähr auf Rechtsgültigkeit. Wir empfehlen in jedem Fall, einen Anwalt zu konsolidieren!

Sie möchten online erfolgreich sein?

Hallo, wir verhelfen Unternehmen zu Online-Wachstum. Ihnen auch?

Weitere Artikel


Blitzschnelles Wordpress mit dem Plugin WP Rocket


Bestes DSGVO Plugin für Wordpress 2023: DSGVO Pixelmate


Top Google Platzierung mit einem SEO Audit


Warum schnelle Ladezeiten einer Webseite wichtig sind


3 Tools zum Messen von Website Ladezeiten


Website Knorr-Bremse: ein Performance Test


Vorteile einer Individual-Software gegenüber Software von der Stange


Affiliate-Werbung ohne Cookies und Tracking