• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >Lua > Lua中的源代码预编译浅析

Lua中的源代码预编译浅析

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了Lua中的迭代器(iterator)浅析等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

尽管Lua被称为是一种解释型的语言,但Lua确实允许在运行源代码之前,将源代码预编译成一种中间形式(类比Python的.pyc)。区别解释型语言的主要特征在于编译器是否是语言运行时库的一部分,即是否有能力执行动态生成的代码(Lua可以通过dofile执行Lua代码)。

 其实,dofile的核心功能是由loadfile完成的,可以这样来定义dofile:

loadfile并不是执行代码,而只是编译,返回一个函数,由dofile执行。
如果多次运行一个文件,可以只调用一次loadfile,重复调用其返回的函数即可。
  
另外一个函数,loadstring从字符串加载代码:
> f = loadstring('print "hello"')
> f()
hello
</div>
考察一下loadstring代码的执行域
> i = 1
> f = loadstring('i = i + 1')
> =i
1
  
--不要完了交互式命令行中,一行代码默认一个block
  
> f = loadstring('i=i+1')
> do
>> local i =1
>> f()
>> print(i)
>> end
1
  
> do
>> local i = 1
>> local f = loadstring('i=i+1')
>> f()
>> print(i)
>> end
1
</div>
两次运行,都是将global中的i加1.
可以这样理解f:
function f()
i = i+1
end
</div>
但如果直接替换,其结果并不一致。
> do
>> local i =1
>> function f()
>> i = i + 1
>> end
>> f()
>> print(i)
>> end
2
</div>
可以认为,loadstring编译出的函数,会关联global scope,因而不会表现出闭包的特性,故而,应该尽量不使用这种方式!
  
另外,如果语法有误,那么loadstring返回nil。
可以使用assert(loadstring(s))()的方式。
如果参数不是nil/false,返回参数,否则assert error;
  
深究一下loadfile和loadstring就会知道,Lua中其实有一个load函数,后者接收一个reader function,调用其读取代码;

</div>

您可能想查找下面的文章:

相关文章

  • 详解Lua中的元表概念
  • Lua中函数与面向对象编程的基础知识整理
  • Lua函数用法研究
  • Lua编程示例(一):select、debug、可变参数、table操作、error
  • Lua和C++语言的交互详解
  • Lua中遍历数组和table的4种方法
  • Lua5.1中加载dll动态链接库的方法
  • Lua 学习笔记之C API 遍历 Table实现代码
  • Lua编程示例(五): C语言对Lua表的读取和添加
  • 详解Lua中的变量相关知识点

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 简单的Lua 连接操作mysql数据库的方法
    • Lua教程(十三):弱引用table
    • Lua获取系统时间和时间格式化方法及格式化参数
    • Lua模拟面向对象示例分享
    • Lua中的动态链接实例
    • Lua极简入门指南(三): loadfile和错误处理
    • Lua中的元表与元方法学习总结
    • Lua元表与元方法实例讲解
    • Lua中的函数代码实例
    • Lua判断字符串中包含中文字符的方法和计算字符串宽度函数分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有