4
int lua_isstring (lua_State *L, int index);

如果给定可接受索引处的值是字符串或数字(始终可转换为字符串),则此函数返回 1,否则返回 0。(来源

是否有一种(更优雅的)方法来真正证明给定的字符串是否真的是字符串而不是Lua 中的数字?这个功能对我来说完全没有意义!

我的第一个想法是另外检查字符串长度

 `if(string.len(String) > 1) {/* this must be a string */}`

……但这感觉不太好。

4

2 回答 2

3

你可以更换

lua_isstring(L, i)

对字符串或数字返回 true

lua_type(L, i) == LUA_TSTRING

仅对实际字符串产生 true 。

相似地,

lua_isnumber(L, i)

对于数字或可以转换为数字的字符串返回 true;如果您想要更严格的检查,可以将其替换为

lua_type(L, i) == LUA_TNUMBER

(我已经编写了包装函数,lua_isstring_strict()并且lua_isnumber_strict()。)

于 2015-09-29T15:05:56.570 回答
2

这个功能对我来说完全没有意义!

根据 Lua 的强制规则,这是有道理的。任何接受字符串的函数也应该接受一个数字,将该数字转换为字符串。这就是语言语义的定义方式。这种方式lua_isstringlua_tostring工作允许您在 C 绑定中自动实现这些语义,而无需额外的努力。

如果您不喜欢这些语义并且想要禁用字符串和数字之间的自动转换,您可以定义LUA_NOCVTS2N和/或LUA_NOCVTN2S在您的构建中。特别是,如果您定义LUA_NOCVTN2S,lua_isstring将为数字返回 false。

于 2015-09-29T18:37:56.753 回答