web-dev-qa-db-fra.com

Puis-je vérifier l'égalité des chaînes dans lua?

Juste une question simple pour les débutants, je code des trucs Lua pour Garrys Mod, j'apprends en lisant le wiki et d'autres codages.

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

ce qui précède est le code que je veux utiliser, pour vérifier si l'identifiant Steam (qui, je crois, est une chaîne) est égal à ma chaîne exacte.

Est-ce viable? Ou existe-t-il une autre façon de le faire?

21
Howard Sun

Cela devrait fonctionner exactement comme vous vous y attendez. Dans lua '==' for string retournera true si le contenu des chaînes est égal.

Comme il a été souligné dans les commentaires, les chaînes lua sont internées, ce qui signifie que deux chaînes qui ont la même valeur sont en fait la même chaîne.

30
lisu

Une chose à considérer lors de l'apprentissage de Lua (sur 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))

La comparaison de chaînes dans Lua est bon marché, la création de chaînes ne l'est peut-être pas.

5
Alexander Altshuler

Selon http://wiki.garrysmod.com/page/Player/SteamID , SteamID() renvoie une chaîne de sorte que vous devriez pouvoir écrire

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

Si jamais vous avez besoin de confirmer le type d'un objet, utilisez type et print, comme dans ce cas print('type is', type(self.Owner:SteamID())) devrait afficher 'type is string'.

2
Oliver