[英]Printing a static variable inside a C++ function called from lua
我正在從我的lua模塊中調用在共享對象文件中定義的C ++函數(print_no)。 C ++函數采用從lua傳遞的參數,並使用它來初始化靜態變量。
我期望當多次調用此函數時,該變量將保留它在第一次調用時獲得的值。 這是我目前對函數內部靜態變量的理解。
這是我的C ++代碼(test.cpp)
extern "C"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
}
static int print_no(lua_State *L)
{
static double d = lua_tonumber(L, 1); /* get argument */
return 1; /* number of results */
}
static const struct luaL_Reg mylib [] =
{
{"print_no", print_no},
{NULL, NULL} /* sentinel */
};
extern "C"
{
int luaopen_mylib (lua_State *L)
{
luaL_register(L, "mylib", mylib);
return 1;
}
}
我使用以下命令制作一個.so文件:
g++ -shared -o mylib.so test.cpp -fPIC
下面給出的是我的lua代碼(module.lua)
temp = require "mylib"
print(temp.print_no(5))
print(temp.print_no(6))
下面給出的是我運行此模塊時的輸出:
[vishal@localhost test]$ lua -v
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
[vishal@localhost test]$ lua module.lua
5
6
我期待兩次都將被打印出來。 我的理解有什么問題?
您沒有將結果推回lua堆棧,因此lua只是讀取堆棧上的下一個值,這是您傳遞給print_no
的參數。
嘗試:
static int print_no(lua_State *L)
{
static double d = lua_tonumber(L, 1); /* get argument */
lua_pushnumber(L, d);
return 1; /* number of results */
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.