int lua_isstring (lua_State *L, int index);
如果给定可接受索引处的值为,则此函数返回1 字符串或数字(始终可转换为字符串)和0 除此以外。 (Source)
如果给定的字符串确实是一个字符串并且不是是Lua中的数字,是否有更优雅的方式来证明?这个功能对我来说毫无意义!
我的第一个想法是另外用
检查字符串长度 `if(string.len(String) > 1) {/* this must be a string */}`
...但感觉这么好。
答案 0 :(得分:3)
您可以替换
lua_isstring(L, i)
,对于字符串或数字
,返回truelua_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_isstring
和lua_tostring
的工作方式允许您自动在C绑定中实现这些语义而无需额外的工作。
如果您不喜欢这些语义并希望禁用字符串和数字之间的自动转换,则可以在构建中定义LUA_NOCVTS2N
和/或LUA_NOCVTN2S
。特别是,如果您定义LUA_NOCVTN2S
,lua_isstring
将为数字返回false。