Могу ли я проверить равенство строк в lua?

Просто прямо на начальном вопросе, я кодирую материал Lua для Garrys Mod, изучая, читая вики и другие кодировки.

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

приведенный выше код, который я хочу использовать, чтобы проверить, соответствует ли идентификатор STEAM (который, я считаю, строка), моей точной строке.

Является ли это жизнеспособным? Или есть другой способ, которым я должен это сделать?

Ответы

Ответ 1

Это должно работать точно так, как вы ожидаете. В lua '==' для строки возвращается true, если содержимое строк равно.

Как отмечалось в комментариях, строки lua интернированы, что означает, что любые две строки, имеющие одинаковое значение, фактически являются одной и той же строкой.

Ответ 2

Одна вещь, которую следует учитывать при изучении Lua (от 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))

Сравнение строк в Lua дешево, создание строк может быть не таким.

Ответ 3

Согласно http://wiki.garrysmod.com/page/Player/SteamID, SteamID() возвращает строку, чтобы вы могли писать

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

Если вам когда-либо понадобится подтвердить тип объекта, используйте type и print, как в этом случае print('type is', type(self.Owner:SteamID())) должен печатать 'type is string'.