lua中dofile、require、loadfile比较

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

loadfile故名思议,它只会加载文件,编译代码,不会运行文件里的代码。
比如,我们有一个hellofile.lua文件:

代码如下:

print(“hello”);
function hehe()
print(“hello”);
end

这个文件里有一句代码,和一个函数。试试用loadfile加载这个文件,如下代码:

代码如下:

loadfile("hellofile.lua");
    print("end");

输出结果如下:

代码如下:

[LUA-print] end

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

2.dofile——执行

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

代码如下:

dofile("E:/Android/wordspace_cocosIDERc0/CocosLuaTest/src/hellofile.lua");
    print("end");

输出结果如下:

复制代码代码如下:

[LUA-print] hello
[LUA-print] end

这里有点尴尬,文件路径我用了绝对路径,因为dofile在Coco Code IDE里使用相对路径会找不到文件(即使使用了addSearchPath)

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

3.require——我只执行一次

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

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

代码如下:

for i = 1, 2, 1 do
        require("hellofile.lua");
    end
    print("end");

为了说明这种情况,我刻意调用了两次require,输出结果如下:

代码如下:

[LUA-print] hello
[LUA-print] end

和我们说的一样,调用了两次,但是代码只执行了一次。
如果这里换成dofile,则会输出两次hello字符串。

时间: 2024-10-29 19:04:41

lua中dofile、require、loadfile比较的相关文章

lua中dofile、loadfile、require区别

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

Lua中的require

lua中的require机制    为了方便代码管理,通常会把lua代码分成不同的模块,然后在通过require函数把它们加载进来.现在看看lua的require的处理流程.1.require机制相关的数据和函数    package.path:保存加载外部模块(lua中"模块"和"文件"这两个概念的分界比较含糊,因为这个值在不同的时刻会扮演不同的角色)的搜索 路径,这种路径是"模板式的路径",它里面会包含可替代符号"?",这

【转载】lua中的require机制

[转载自]http://blog.chinaunix.net/uid-552961-id-2736410.html lua中的require机制 为了方便代码管理,通常会把lua代码分成不同的模块,然后在通过require函数把它们加载进来.现在看看lua的require的处理流程. 1.require机制相关的数据和函数    package.path:保存加载外部模块(lua中"模块"和"文件"这两个概念的分界比较含糊,因为这个值在不同的时刻会扮演不同的角色)的

Lua中的loadfile、dofile、require详解

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

lua中的坑

在工作中使用lua也有一年了,代码也写了不少,踩过不少坑,这里记录一下. table.sort table.sort是lua自带的排序函数,数据量小时,也还是不错的.不过要注意你传入的compare函数.例如: local tb = { 9,8,3,777,0,36548,556,0 } table.sort( tb,function(a,b) return a>=b end ) 上面的代码够简单了,但是你运行起来,却是报错了. Program starting as '"D:\progr

lua 中的上n级模块路径函数分享

在lua开发中使用模块并非难事也非易事,其中关于lua文件定位就不太直接方便. 比如有如下文件结构: 假设 me 是正在开发的模块.而由于 lua 中的 require 函数使用的相对于 lua 解释器的路径,同时 lua 也没有 ../ 这样的上一级文件的写法,所以如果 ti/me/pk/folder.lua 想要调用 ti/me/na 模块的话就必须写成出完整的路径出来.即floder.lua 中的调用语句就是 require (“ti.me.na”) . 但是如果me模块不是在 ti 文件

Lua中的loadfile,dofile,require使用,最后还有调试

1.loadfile---只编译,不运行. loadfile编译代码成中间码并且返回编译后的chunk作为一个函数,而不执行代码:另外loadfile不会抛出错误信息而是返回错误代号. loadstring与loadfile相似,只不过它不是从文件里读入chunk,而是从一个串中读入. 2.dofile----编译.运行. dofile,其实首先是利用loadfile进行编译,然后再运行代码.我们可以定义dofile如下: function dofile (filename) local f =

[RK_2014_0905]ubuntu中,wireshark启动提示:Lua: Error during loading: [string "/usr/share/wireshark/init.lua"]:46: dofile has been disabled

一.问题描述 PC机安装ubuntu14.04,使用root用户登陆. 启动wireshark时,出现一下的Error对话框: Lua: Error during loading: [string "/usr/share/wireshark/init.lua"]:46: dofile has been disabled due to running Wireshark as superuser. 二.解决方法 修改/usr/share/wireshark/init.lua # vi /

Lua中的模块与module函数详解

很快就要开始介绍Lua里的“面向对象”了,在此之前,我们先来了解一下Lua的模块. 1.编写一个简单的模块 Lua的模块是什么东西呢?通常我们可以理解为是一个table,这个table里有一些变量.一些函数… 等等,这不就是我们所熟悉的类吗? 没错,和类很像(实际上我说不出它们的区别). 我们来看看一个简单的模块,新建一个文件,命名为game.lua,代码如下: 复制代码代码如下: game = {}function game.play()    print("那么,开始吧");end