積分値はLuaの文字列に還元されますか?tostring/checkstringでアクセスすると整数が文字列になりますか?
のmain.c:
#include <stdio.h>
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
int ex_dummyfunc(lua_State* L)
{
const char* first = luaL_checkstring(L, 1);
int second = luaL_checkinteger(L, 2);
printf("first = %s, second = %d\n", first, second);
return 0;
}
int main(int argc, char *argv[])
{
lua_State *L = luaL_newstate();
luaL_openlibs(L);
lua_register(L, "dummyfunc", ex_dummyfunc);
if(argc > 1)
{
if(luaL_dofile(L, argv[1]) == 1)
{
fprintf(stderr, "error: %s\n", lua_tostring(L, 1));
}
}
lua_close(L);
return 0;
}
test.lua私は数字が文字列と同じであることに気づいたとき、私は、次のコードを与え、ほぼ満杯で、時間のバグを追跡しようとしました:
dummyfunc("stuff", 42)
dummyfunc(42, 8)
dummyfunc(82, "stuff")
出力:
first = stuff, second = 42
first = 42, second = 8
error: test.lua:4: bad argument #2 to 'dummyfunc' (number expected, got string)
_ EDIT _:
answer by Kevin Ballardのおかげで、および型チェックが内部で実行される方法についていくつかのグーグルが、私はトークンベースタイプの適用を可能にluaL_checktype
を、気づきました。だから、文字列引数を強制するために、この方法で編集する必要がありますex_dummyfunc
機能:
int ex_dummyfunc(lua_State* L)
{
luaL_checktype(L, 1, LUA_TSTRING);
const char* first = luaL_checkstring(L, 1);
int second = luaL_checkinteger(L, 2);
printf("first = %s, second = %d\n", first, second);
return 0;
}
はなぜLuaはdummyfunc
に2回目の呼び出しのタイプのエラーをスローしませんか?ドキュメントによれば
プログラムを実行するときの実際の出力は何ですか? –
@Peter Lillevold:質問 –