Jump to content

Empfohlene Beiträge

Geschrieben

Hallo,

In der Demoanlage "Zug per Namen finden" von @Goetz A197B196-0219-4B99-A9E5-064A6B285503 ist folgendes Skript:
 

local Zugname = controller.link.text       -- liest den Zugnamen vom zugehörigen Textfeld
local DepotTable1 = $("Depot 1").getEntriesByName(Zugname)
local DepotTable2 = $("Depot 2").getEntriesByName(Zugname)

if #DepotTable1 > 0 then
  local number = DepotTable1[1]
  $("Depot 1"):release(number)
elseif #DepotTable2 > 0 then
  local number = DepotTable2[1]
  $("Depot 2"):release(number)
end

wenn ich die Autovervollständigung in Zeile 2 nutze wird bei der Eingabe von

local DepotTable1 = $("Depot 1").g

dies vorgeschlagen...
1710400906_Bild001.thumb.jpg.ab54c1307f257ca5e13d330d083e4fa8.jpg

erst bei der Eingabe von

local DepotTable1 = $("Depot 1"):g

wird das "richtige" vorgeschlagen...
813516309_Bild002.thumb.jpg.a617563511543c73daacbf5062c84e95.jpg

... um

local DepotTable1 = $("Depot 1").getEntriesByName(Zugname)

darzustellen.

Nun stellt sich mir die Frage warum es mit dem "." funktioniert? ... oder was ist der Unterschied zwischen "." und ":"?

Gruß
EASY

Geschrieben (bearbeitet)
vor einer Stunde schrieb EASY:

was ist der Unterschied zwischen "." und ":"

Der Punkt trennt Tabellennamen von Tabellenindex, wenn es sich bei diesem Index um einen Bezeichner handelt.

Tabelle.Zelle == Tabelle["Zelle"]

 

Wenn der Tabelleninhalt eine Funktion ist, dann sorgt der Doppelpunkt dafür, dass der Teil davor als erstes Argument an diese Funktion übergeben wird.

Tabelle:Funktion() == Tabelle.Funktion(Tabelle)

 

Hier habe ich das in einem kurzen Video (10 Minuten) erklärt:

 

Damit ähnelt das hinter dem Doppelpunkt grob den Methoden, die man in Objekt-orientierten Sprachen kennt.

Viele Grüße
Götz

 

P.S.: Eigentlich sollte es auch in den Zeilen 2 und 3 besser ein Doppelpunkt sein, um das Depot selbst an die Funktion zu übergeben.
Neo fängt den fehlenden Bezug offenbar auf, der durch meinen einfachen Punkt verursacht wird.

Ich habe das in meiner Demoanlage jetzt korrigiert!

Bearbeitet von Goetz
Ergänzungen
Geschrieben

Hallo @Goetz,

danke für Deine Antwort... den "geheimnisvollen Doppelpunt" habe ich mir früher schon mal angesehen (und ich bilde mir ein es verstanden zu haben...)
Daß es das MBS damit (anscheinend) nicht so genau nimmt, könnte daran liegen...

vor 2 Stunden schrieb Goetz:

Neo fängt den fehlenden Bezug offenbar auf, der durch meinen einfachen Punkt verursacht wird

... (manchmal) kann @Neo auch nett sein;)...

Gruß
EASY

Geschrieben
vor 33 Minuten schrieb EASY:

... (manchmal) kann Neo auch nett sein

Obendrein ist er clever und versteht sein Handwerk!

Deshalb findest du die Funktion nur nach Eingabe des Doppelpunkts.
Weil der besagt, dass jetzt eine Methode für dieses Objekt gewünscht wird.

Der einfache Punkt führt zu den Eigenschaften/Variablen.

Geschrieben

Hallo,

selbstverständlich bin ich ein netter Typ, aber darüberhinaus hat es technische Gründe, warum der Doppelpunkt eigentlich gar nicht nötig ist, denn die Objekte, die per Lua angesprochen werden, sind lediglich "Proxy-Tabellen", die alle Aufrufe an die internen Studio-Objekte weiterleiten, weshalb es genau genommen kein zusätzliches Self-Argument braucht.

Da solche Interna aber für den Nutzer nicht wichtig sind und weil es der Lua-Konvention entspricht, führt die Studio-Dokumentation alle Objektmethoden nur mit dem Doppelpunkt auf.

Viele Grüße,

Neo

Geschrieben

Hallo,

vor 2 Stunden schrieb Neo:

Da solche Interna aber für den Nutzer nicht wichtig sind...

... bei solchen Typen wie mir, weckt es die Neugier... und da ist es schön, wenn so ein netter Typ (wie Du) es [trotzdem] erklärt...:)

Gruß
EASY

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...