lua_isstring()检查Lua中的真实字符串

时间:2015-09-29 14:38:00

标签: string lua typechecking lua-api

int lua_isstring (lua_State *L, int index);
     

如果给定可接受索引处的值为,则此函数返回1   字符串或数字(始终可转换为字符串)和0   除此以外。 (Source

如果给定的字符串确实是一个字符串并且不是是Lua中的数字,是否有更优雅的方式来证明?这个功能对我来说毫无意义!

我的第一个想法是另外用

检查字符串长度
 `if(string.len(String) > 1) {/* this must be a string */}`

...但感觉这么好。

2 个答案:

答案 0 :(得分: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()。)

答案 1 :(得分:2)

  

这个功能对我来说毫无意义!

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

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