web-dev-qa-db-ja.com

luaで文字列の等価性を確認できますか?

初心者向けの質問ですが、ウィキやその他のコーディングを読んで学んで、Garrys Mod用にLuaをコーディングしています。

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

上記は、使用したいコードで、Steam ID(これは文字列だと思います)が私の正確な文字列と等しいかどうかを確認するために使用します。

これは実行可能ですか?または、私がそれを行うべき別の方法がありますか?

21
Howard Sun

これは期待どおりに機能するはずです。 luaでは、文字列の内容が等しい場合、文字列の「==」はtrueを返します。

コメントで指摘されたように、lua文字列はインターンされます。つまり、同じ値を持つ2つの文字列は実際には同じ文字列です。

30
lisu

Luaを学習する際に考慮すべき1つのこと(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での文字列比較は安価ですが、文字列の作成はそうではありません。

5

http://wiki.garrysmod.com/page/Player/SteamID によると、SteamID()は文字列を返すため、次のように書くことができます。

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

オブジェクトのタイプを確認する必要がある場合は、typeprintを使用します。この場合、print('type is', type(self.Owner:SteamID()))は「type is string」と出力する必要があります。

2
Oliver