找回密码
 register

QQ登录

只需一步,快速开始

查看: 100|回复: 0

Lua中的loadfile、dofile、require详解

[复制链接]

Lua中的loadfile、dofile、require详解

[复制链接]
  • 打卡等级:热心大叔
  • 打卡总天数:94
  • 打卡月天数:17
  • 打卡总奖励:94
  • 最近打卡:2025-01-18 01:28:20
Waylee

主题

0

回帖

1万

积分

仙帝

积分
12360
Waylee 2022-10-12 21:40 | 显示全部楼层 |阅读模式

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×
这篇文章主要介绍了Lua中的loadfile、dofile、require详解,本文分别用实例讲解它的用法和特点等内容,需要的朋友可以参考下

1.loadfile——只编译,不运行

loadfile故名思议,它只会加载文件,编译代码,不会运行文件里的代码。
比如,我们有一个hellofile.lua文件:
  1. print(“hello”);
  2. function hehe()
  3. print(“hello”);
  4. end
复制代码
这个文件里有一句代码,和一个函数。试试用loadfile加载这个文件,如下代码:
  1.     loadfile("hellofile.lua");
  2.     print("end");
复制代码
输出结果如下:
  1. [LUA-print] end
复制代码

如果说loadfile会执行文件里的代码的话,那么,应该会输出hello字符串的。
结果表明,它是不会执行代码的。

2.dofile——执行

很明显,dofile就是会执行代码的家伙了,如下代码:

  1.     dofile("E:/Android/wordspace_cocosIDERc0/CocosLuaTest/src/hellofile.lua");
  2.     print("end");
复制代码
输出结果如下:
  1. [LUA-print] hello
  2. [LUA-print] end
复制代码
这里有点尴尬,文件路径我用了绝对路径,因为dofile在Coco Code IDE里使用相对路径会找不到文件(即使使用了addSearchPath)

不过没关系,不影响本文的内容。

3.require——我只执行一次

require和dofile有点像,不过又很不一样,require在第一次加载文件的时候,会执行里面的代码。

但是,第二次之后,再次加载文件,则不会重复执行了。换句话说,它会保存已经加载过的文件,不会重复加载。
测试代码如下:

  1.     for i = 1, 2, 1 do

  2.         require("hellofile.lua");

  3.     end

  4.     print("end");
复制代码
为了说明这种情况,我刻意调用了两次require,输出结果如下:
  1. [LUA-print] hello
  2. [LUA-print] end
复制代码
和我们说的一样,调用了两次,但是代码只执行了一次。
如果这里换成dofile,则会输出两次hello字符串。

4.结束

我发现这样边看书边整理文章,进度有点慢…真是鱼和熊掌的问题了。

您需要登录后才可以回帖 登录 | register

本版积分规则

雪舞知识库 | 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 |天天打卡

GMT+8, 2025-1-19 11:34 , Processed in 0.100316 second(s), 8 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

快速回复 返回顶部 返回列表