23-10-2014, Thursday-09:00:17
Die methode ist korrekt als _cmp eingebunden. Man kann diese nur nicht direkt aufrufen.
Diese Metamethoden werden intern nicht wie 'normale' Klassen-funktionen gespeichert. Diese Methoden sind dazu da, Operatoren zu ueberladen (wie in C++), d.h. diese Methoden werden intern aufgerufen, wenn Vergleiche (_cmp), Addition (_add) etc gemacht werden.
Das bloede ist halt, dass man die Abfrage auf Gleichheit (== ) nicht direkt ueberladen kann:
Bei == wird tatsaechlich nur geprueft, ob es sind um ein und dasselbe Object handelt. In obigen Beispiel sehen a und b zwar gleich aus, sind aber intern zwei verschiedene Tabellen. Durch die Zuweisung c=a ist aber c dann die gleiche Tabelle wie a.
Die Variable id habe ich extra nicht dokumentiert. Die Variable wird benutzt, um Skript-intern dann das zugehoerige C++ Objekt zu finden. Wenn man id veraendert, bekommt man eine andere Haltestelle geliefert...
Code:
b1 = (halt1 <=> halt2) == 0 // ruft intern _cmp auf
b2 = halt1._cmp(halt2) // error _cmp not found
Das bloede ist halt, dass man die Abfrage auf Gleichheit (== ) nicht direkt ueberladen kann:
Code:
a = { x=1 }
b = { x=1 }
c = a
print( a==b ) // false!
print( a==c) // true!
a.x=2
print( a==b ) // false!
print( a==c) // true!
Die Variable id habe ich extra nicht dokumentiert. Die Variable wird benutzt, um Skript-intern dann das zugehoerige C++ Objekt zu finden. Wenn man id veraendert, bekommt man eine andere Haltestelle geliefert...