LUA中遇到这个错误attempt to call a nil value (global 'loadstring')

Lua编程技巧与实践
本文深入探讨了Lua编程语言的基础知识、高级特性及实战应用,包括loadstring的使用、文件读取、函数调用和循环操作等核心概念,并通过具体代码实例展示了如何在Lua环境中进行高效编程。
该文章已生成可运行项目,

f = loadstring("i = i + 1")
i = 0
f(); print(i)
f(); print(i)

因为loadstring在lua5.2中已经被弃用了,这个代码可以正常使用

load( "print( 'test' )" )( )

https://github.com/gameplay3d/GamePlay/issues/1022


下面的代码可以在lua 5.1中使用,一定要输入一个数字

--print("loadstring type:" .. type(loadstring))
--io.input("foo.lua")
local l = io.read()
local f = assert(loadstring('return "' .. l .. '"'))

print(type(f))
print(type(f()))
print(f())
for i=1,20 do
	x = i
	print(string.rep("*", f()))
end


本文章已经生成可运行项目
这个 Lua 报错: ``` attempt to call a nil value (global 'Vdata') ``` 意思是:你试图调用一个名为 `Vdata` 的全局变量,但它当前的值是 `nil`(即未定义或已被设为 nil),而你却像调用函数一样使用了它,比如写成了 `Vdata(...)`。 ### 常见原因和解决方法: 1. **函数名拼写错误或未定义** ```lua Vdata("hello") -- 如果你本意是调用某个函数,但 Vdata 没有定义 ``` 确保你已经定义了 `Vdata` 函数,例如: ```lua function Vdata(msg) print("Data:", msg) end ``` 2. **加载模块失败或顺序错误** 如果 `Vdata` 是在另一个文件中定义的(如通过 `require` 或 `dofile` 加载),可能该文件没有正确加载,或者执行顺序不对。 ```lua dofile("vdata.lua") -- 确保这个文件存在并正确定义了 Vdata Vdata("test") -- 调用 ``` 3. **被意外覆盖为 nil** 可能在代码某处不小心将 `Vdata` 设为了 nil: ```lua Vdata = nil -- 后续再调用就会报错 ``` 4. **模块返回值未正确赋值** 如果你这样写: ```lua local Vdata = require "some_module" ``` 但 `some_module` 没有返回一个函数,而是返回了 nil 或 table,也可能导致问题。 --- ✅ **调试建议:** 在调用前加一行检查: ```lua print(Vdata) --> 如果输出 nil,说明没定义 ``` 然后确认是否遗漏定义、拼写错误、路径问题等。 --- ```lua -- 示例:正确使用 function Vdata(x) print("Vdata received:", x) end Vdata("Hello World") -- 正常运行 ``` ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赫敏璋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值