这只是一个简单的初学者问题,我正在编写适用于Garrys Mod的Lua代码,并通过阅读维基和其他代码学习。
if (self.Owner:SteamID( ) == "STEAM_0:1:44037488" ) then
以上是我想使用的代码,用于检查STEAM ID(我认为是一个字符串)是否等于我的确切字符串。
这可行吗?还是我应该使用其他方法?
这只是一个简单的初学者问题,我正在编写适用于Garrys Mod的Lua代码,并通过阅读维基和其他代码学习。
if (self.Owner:SteamID( ) == "STEAM_0:1:44037488" ) then
以上是我想使用的代码,用于检查STEAM ID(我认为是一个字符串)是否等于我的确切字符串。
这可行吗?还是我应该使用其他方法?
这应该正如你所期望的那样工作。在lua中,对于字符串来说,'=='将在字符串内容相等时返回true。
正如评论中指出的那样,lua字符串是内部化的,这意味着具有相同值的任何两个字符串实际上是同一个字符串。
学习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中的字符串比较是廉价的,但创建字符串可能不是。
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'。
if
语句中使用括号),非标准化的语法(!
,||
,&&
别名用于not
,or
和and
),并且具有相当糟糕的API(随机替换内置函数,如require
和loadstring
,FooEx
函数等)。 - Colonel Thirty Two