Lua入门

作者: 河北漂 | 来源:发表于2018-10-31 17:25 被阅读0次

Lua 是一种轻量小巧的脚本语言,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。常用语游戏开发中。

Lua.png

Lua的优势

Lua的设计目的就是为应用程序提供灵活的扩展和定制功能,那么基于这个目的,他的优势有什么呢?

  • 轻量级 编译后只有100k左右,可以说引入的成本相当低。
  • 可扩展 Lua本来就是C做的,所以Lua调用C或者C++的类库有天然的优势,这里的扩展,实际上是方便使用其他的类库,常用于游戏开发,也是这个原因,调用本地的类库方便。
  • 语法简单 脚本语言,语法相对简单,容易上手,学习成本低。

Lua的基本语法

Lua与其他语言一样,也有变量,数组,运算符,流程控制,循环判断,函数,字符串,数据结构等。这里只介绍与Java差异的地方。

  • 变量默认是全局,局部需要用 local 修饰
  • 变量可以同时赋值多个,采用多略,少 nil 的策略
  • 判断语句是if..then..end
  • 循环语句是for..do..end
  • 函数有多个返回值,与赋值语句类似
  • 不等于是“~=” ,非是not
  • 用string. 可以有很多自带的字符串操作,如:string.reverse(arg)
  • 数组默认下标从1开始,也可以用负数,负数表示从后往前算
  • table是Lua特有的数据类型,是一个K,V键值对,用table.操作
  • for k, v in pairs(t) do..end 迭代table,k&v 对应 键&值
  • for i, v in ipairs(t) do..end 迭代table,i是带下标
  • require "<模块名>" 引用其他模块
  • table可以setmetatable元表,为table增加额外的功能,__add,__call等

以上是一些常用的操作中的不同点。

Lua与Java交互

LuaJ是纯Java实现的Lua解析器,不需要dll文件,不存在内存风险。维护团队更新也比较活跃。可谓首选。

首先引入jar包

<dependency>
 <groupId>org.luaj</groupId>
 <artifactId>luaj-jse</artifactId>
 <version>3.0.1</version>
</dependency>

创建Java类,如Main.java

import org.luaj.vm2.Globals;
import org.luaj.vm2.LuaValue;
import org.luaj.vm2.lib.jse.JsePlatform;

/**
 * 程序主要入口
 *
 * @author jack
 */
public class Main {

    public static void main(String[] args) {
        //初始化lua运行时环境
        Globals globals = JsePlatform.standardGlobals();
        LuaValue chunk = globals.loadfile("lua/main.lua");
        chunk.call();
        //获取入口函数
        LuaValue func = globals.get(LuaValue.valueOf("main"));
        String result = func.call().toString();
        System.out.println(result);
    }
}

在resources目录下创建lua脚本,如main.lua

---
--- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by jack.
--- DateTime: 2018/10/30 21:07
---
--- Lua入口函数
function main()
    return "hello world!"
end

这是Java类调用Lua脚本,其实在Lua脚本中还能使用Java类,比如一些工具类。
比如新建一个日志Java类Logger

/**
 * @author jack
 */
public class Logger {
    public static void log() {
        System.out.println("Logger Logger Logger");
    }
    public static void log(String param) {
        System.out.println(param);
    }
}

在main.lua中用以下方式就能触发Java类

---
--- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by jack.
--- DateTime: 2018/10/30 21:07
---
local logger = luajava.bindClass("third.jar.lua.Logger")
function main()
    logger:log()
    return "hello world!"
end

确实非常方便

总结

Lua作为一个脚本语言,嵌入的应用程序中非常方便,成本也不高。但是实际项目中用的却不多,我总结主要原因

  • Lua的执行性能相比Java要差一些
  • Lua应用于游戏领域较多,其他领域的Java程序员不习惯使用
  • Lua的优势在于与C的无缝调用,Java的应用,这种场景并不多,况且还有JNI在

虽然有以上情况,但不得不说Lua确实很好用。

相关文章

  • lua开发文章集锦

    lua入门教程:http://www.runoob.com/lua/lua-tutorial.html nginx...

  • lua入门笔记 目录

    lua的中文API lua入门笔记1 类型 表达式 语句 函数lua入门笔记2 深入函数 深入函数 迭代器与泛型f...

  • Lua 入门

    Lua是区分大小写的。 Lua中有8个基本类型分别为:nil、boolean、number、string、user...

  • Lua入门

    --Lua中变量的定义规则 --1.直接写变量名,而无需指定类型 --2.Lua中的语句末尾可以不加";" nam...

  • lua入门

    Lua 简介

  • lua入门

    lua官网在线运行代码 数据类型 字符串定义 四种字符串定义方式 关键字 关键字不能用用作变量名。特别的:a.en...

  • Lua入门

    Lua 是一种轻量小巧的脚本语言,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。常用语游...

  • lua脚本是什么?lua脚本语言全套入门自学零基础学习教程

    lua脚本是什么?lua脚本语言全套入门自学零基础学习教程 lua是一种脚本语言,用C语言编写,源码开放,其设计目...

  • LUA_API lua_absindex

    本系列不会讲 Lua 的基础语法,由于Lua的轻便简洁,读者自行搜索了解,很快就可以入门。本节开始,将直接进入 L...

  • Lua 快速入门

    Lua 是一门强大、快速、轻量的嵌入式脚本语言,那么我们如何才能够快速学习和掌握 Lua 语言呢?在这我将分享一下...

网友评论

      本文标题:Lua入门

      本文链接:https://www.haomeiwen.com/subject/ikogtqtx.html