web-dev-qa-db-de.com

Kann ich die Gleichheit von Strings in lua überprüfen?

Nur eine einfache Anfängerfrage, ich programmiere Lua-Sachen für Garrys Mod und lerne, indem ich Wiki und andere Codierungen lese.

if (self.Owner:SteamID( ) == "Steam_0:1:44037488" ) then

das obige ist der Code, den ich verwenden möchte, um zu überprüfen, ob die Steam-ID (von der ich glaube, dass sie eine Zeichenfolge ist) meiner exakten Zeichenfolge entspricht.

Ist das machbar? Oder gibt es eine andere Möglichkeit, wie ich es machen soll?

21
Howard Sun

Dies sollte genau so funktionieren, wie Sie es erwarten. In lua gibt '==' für string true zurück, wenn der Inhalt der Strings gleich ist.

Wie bereits in den Kommentaren erwähnt, werden lua-Zeichenfolgen interniert. Das bedeutet, dass zwei Zeichenfolgen, die denselben Wert haben, tatsächlich dieselbe Zeichenfolge sind.

30
lisu

Eine Sache, die Sie beim Lernen von Lua beachten sollten (von www.lua.org/source/5.2/lstring.h.html):

/*
** as all string are internalized, string equality becomes
** pointer equality
*/
#define eqstr(a,b)      ((a) == (b))

Der Vergleich von Strings in Lua ist billig, die Erstellung von Strings möglicherweise nicht.

5

Laut http://wiki.garrysmod.com/page/Player/SteamID gibt SteamID() einen String zurück, damit Sie schreiben können sollten

if self.Owner:SteamID() == "Steam_0:1:44037488" then
    ...do stuff...
end

Wenn Sie jemals den Typ eines Objekts bestätigen müssen, verwenden Sie type und print, wie in diesem Fall print('type is', type(self.Owner:SteamID())) sollte 'type is string' ausgeben.

2
Oliver