Могу ли я проверить равенство строк в 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'.