LUA怎么获取指定的函数返回值

LUA怎么获取指定的函数返回值,第1张

当 Lua 调用 C 函数的时候,使用和 C 调用 Lua 相同类型的栈来交互。C 函数从栈中获取她的参数,调用结束后将返回结果放到栈中。为了区分返回结果和栈中的其他的值,每个 C 函数嫌袭还会返回结果的个数衡者唤(the  function  returns  (in  C)  the  number  of  results  it  is leaving on the stack.)。

// luacallcpp.cpp : 定义控制台应用程序的入口点。

//

#include "stdafx.h"

#include <stdio.h>

//lua头文件

#ifdef __cplusplus

extern "C" {

#include "lua.h"  

#include <lauxlib.h>  

#include <lualib.h>  

}  

#else

#include <lua.h>

#include <lualib.h>

#include <lauxlib.h>

#endif

int static add(lua_State* L)

{

 //获取第一个参数

 double x=lua_tonumber(L,1)

 double y=lua_tonumber(L,2)

 //返回值压栈,压入两个返回值

 lua_pushnumber(L,x+y)

 lua_pushnumber(L,1000)

//返回值的个数,

 return 2

}

int _tmain(int argc, _TCHAR* argv[])

{

lua_State * L=NULL

/* 初始化 Lua */  

 L = lua_open()

/* 载入Lua基本库 */  

 luaL_openlibs(L)

/* 运行脚本 */  

 luaL_dofile(L, "./script/func.lua")

//函数入栈

 lua_pushcfunction(L,add)

 //设置全局函数名

 lua_setglobal(L,"Add")

 //调用lua函数LUACALLCPP来反调cpp中的add

 lua_getglobal(L,"LUACALLCPP")

 lua_pushnumber(L,10)

 lua_pushnumber(L,34.33)

 //两个参数,两个返回值

 lua_pcall(L,2,2,0)

 //取返回值二

 printf("lua call cpp return val is %f \n",lua_tonumber(L,-1))

 //取咐凯返回值一

 printf("lua call cpp return val is %f \n",lua_tonumber(L,-2))

 /* 清除Lua */  

 lua_close(L)

return 0

}

---------------------------------------

--region *.lua

--Date

--此文件由[BabeLua]插件自动生成

print("func.lua hava been loaded")

function LUACALLCPP(x,y)

-- 调用c++中的函数

return Add(x,y)

--print(Add(x,y))

end

--endregion

运行结果:

-- 函数功能:获取一个指定范围内的随机整数

-- 参数1:number, 范围下限

-- 参数2:number, 范围上限

local getRandomInteger = function (lower_limit, upper_limit)

-- 把系统时间作为随机数种子

local seed = os.time() -- 1970年1月1日8时0分至今经历的秒数

-- 把获取的系缺世统时间转换成字符串然后反转

-- 这么做是要防止短时间内多次调用本函数得到一样的随机结果

-- 因为os.time() 返回的时间是秒级的, 而 random() 有个毛病就是如伏搭肢果 seed 很小或者seed 变化很小,产生的随机序列会很相似

seed = tostring(seed):reverse()

math.randomseed(seed)

-- 生成指定范围的随机整数

return math.random(lower_limit, upper_limit)

end

-- 定义table

sss = {321, 5453, 323, 454, 345, 765}

-- 用print()或toast()打印枝烂table中的随机数,哪个函数有用取决于具体实现,电脑一般用print()

-- print(sss[getRandomInteger(1, 6)])

toast(sss[getRandomInteger(1, 6)])

假设有一个很多行文本的文件,你想从中读取一行,并打印到屏幕上。为此我们可以使用 io.open() 命令打开文件并读取。

命令的语法是 io.open(filename, mode)。此处将使用 r 作为 mode 的值,意指读取(read)模式。作为参考,下型搏颤面是卜败所有可用模式的列表:

引用:

r - 读取模式w - 写入模式(覆盖现有内容)

a - 附加模式(附加在现有内容之后)

b - 二进制模式

r+ - 读取更新模式(现有数据保留)

w+ - 写入更新模式(现有数据擦除)

a+ - 附加更新模式(现有数据保留,只在文件末尾附加)

第一件要做的事情就是打开文件并存为一个变量。看下面。

代码:

file = io.open("testRead.txt", "r")

*n - 读取一个数字并返回它。例:file.read("*n")

*a - 从当前位置读取整个文件。例:file.read("*a")

*l - (默认) - 读取下一银腊行,在文件尾 (EOF) 处返回 nil。例:file.read("*l")

number - 返回一个指定字符个数的字符串,或在 EOF 时返回 nil。例:file.read(5)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12419171.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存