LUA学习笔记之 Compilation, Execution, and Errors

转载 2013年12月04日 09:25:27

 Compilation, Execution, and Errors
前面我们介绍过dofile函数, 其实dofile的实现如下:
    function dofile (filename)
      local f = assert(loadfile(filename))
      return f()
    end
loadfile函数很灵活, 我们可以多次调用loadfile的返回结果来反复执行一段代码. 但是如果出错loadfile将返回nil和一个错误提示信息. 
loadstring功能和loadfile类似, 参数为要直接处理的script内容.
    f = loadstring("i = i + 1")
    i = 0
    f(); print(i)   --> 1
    f(); print(i)   --> 2

loadstring载入后相当于多了一个匿名函数定义,
-- file `foo.lua'
    function foo (x)
      print(x)
    end

    f = loadfile("foo.lua")
    f()           -- defines `foo'
    foo("ok")     --> ok

你也可以使用loadstring(s)()达到同样的效果.
使用loadstring时所用的变量都位于全局空间:
    local i = 0
    f = loadstring("i = i + 1")      -- global i
    g = function () i = i + 1 end    --local i

The require Function
Lua提供了一个函数require用来载入库. require作的工作有些像dofile但有两点重要不同:require会在path指定的路径搜索文件, 而且require可以知道一个文件是否已被执行, 如果已被执行过, 那么不会再次被执行.

Lua使用的path和许多平台使用的标准path有些不同, 许多平台使用的path是一系列含有目标文件的文件夹,但是Lua不一样. Lua使用的ANSI C语言并没有path这样的概念, 因此Lua使用的是字符串匹配的方式. '?'代表文件名, 以';'隔开.
?;?.lua;c:/windows/?;/usr/local/lua/?/?.lua
如果调用 require 'lili', 那么会尝试打开下列文件:
lili
lili.lua
c:/windows/lili
/usr/local/lua/lili/lili.lua
require会首先检查全局变量LUA_PATH, 如果LUA_PATH是一个字符串类型, 那么使用它的值. 否则检查环境变量LUA_PATH, 如果以上值都不存在, 那么使用一个定值, 这个值可以在编译LUA的时候方便的加以改变.

另一个require的主要功能是避免一个文件被执行多次. 为了实现这个目的, 它保存了一个table用来记录所有已经载入的文件. 注意, 这里的key值并不是真实的文件名而是一个虚拟文件名. 所以
require "foo"
require "foo.lua"
path是"?;?.lua", 那么foo.lua会被载入两次. 可以通过全局变量 _LOADED 访问到这个表的值. 
path中可以含有固定文件的值, 例如:
?;?.lua;/usr/local/default.lua
在这种情况下, 如果 reqire 不能找到其他的匹配, 那么就使用/usr/local/default.lua.

B - A and B and Compilation Errors

A and B are preparing themselves for programming contests. B loves to debug his code. But before he ...

codeforces——519B—— A and B and Compilation Errors

B. A and B and Compilation Errors time limit per test 2 seconds memory limit per test 256 me...

A and B and Compilation Errors——找出消失的数字

B. A and B and Compilation Errors time limit per test 2 seconds memory limit per test 25...

Codeforces Round #294 (Div. 2) -- B. A and B and Compilation Errors

B. A and B and Compilation Errors time limit per test 2 seconds memory limit per test 25...

【Java学习笔记】17:Single Threaded Execution Pattern

Single Threaded Execution Pattern是指“以一个线程执行的模式”的意思,就像通过某些独木桥时一次只能让一个人走完再走下一个人,否则桥就会断裂(得不到预期的效果)。 下面的...

lua学习笔记

  • 2014年03月05日 11:15
  • 13KB
  • 下载

You may get compilation errors for afxsock.h

Build fails with the following errors :Error 1 error C2065: 'IPPROTO_IPV6' : undeclared identifier c...

快速解决Error:Execution failed for task ':app:compileReleaseJavaWithJavac'. > Compilation failed; see th

> 自从AS升级2.3之后,偶尔遇到一个问题 Error:Execution failed for task ':appmain:compileReleaseJavaWithJavac'. >...

高性能JavaScript_编程---笔记一(Loading and Execution加载和运行)

1.javascript加载 顺序:尽量在页面底部加载js文件 数量:尽量将若干javascript代码块打包成一个js文件引入(打包工具[yahoo!combo hander]) js属性...

<<High Performance JavaScript>>读书笔记-1.Loading and Execution

标签会阻塞页面的解析过程,新的浏览器已经充许标签之间可以并行下载,但仍然会阻塞其它资源的下载   Nonblocking Scripts   1.Deferred Scripts defer...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LUA学习笔记之 Compilation, Execution, and Errors
举报原因:
原因补充:

(最多只允许输入30个字)