zoukankan      html  css  js  c++  java
  • Lua

    Hello World

    交互式编程

    Lua 交互式编程模式可以通过命令 lua -i 或 lua 来启用:

    [huey@huey-K42JE lua]$ lua
    Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
    > print("hello world")
    hello world

    脚本式编程

    我们可以将 Lua 程序代码保持到一个以 lua 结尾的文件,并执行,该模式称为脚本式编程,如我们将如下代码存储在名为 hello.lua 的脚本文件中:

    print("hello world")

    使用 lua 命令执行以上脚本,输出结果为:

    [huey@huey-K42JE lua]$ lua hello.lua 
    hello world

    或者将代码修改为如下形式来执行脚本:

    #!/usr/bin/lua
    print("hello world")

    为 hello.lua 添加可执行权限,并执行

    [huey@huey-K42JE lua]$ chmod a+x hello.lua 
    [huey@huey-K42JE lua]$ ./hello.lua 
    hello world

    注释

    单行注释:

    -- 单行注释

    多行注释:

    --[[
      多行注释
      多行注释
    --]]

    数据类型

    Lua 是动态类型语言,变量不要类型定义,只需要为变量赋值。值可以存储在变量中,作为参数传递或结果返回。

    Lua 中有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table。

    数据类型 描述
     nil  只有值 nil 属于该类,表示一个无效值(在条件表达式中相当于 false)
     boolean  包含两个值:false 和 true
     number  表示双精度类型的实浮点数
     string  字符串由一对双引号或单引号来表示
     function  由 C 或 Lua 编写的函数
     userdata   表示任意存储在变量中的 C 数据结构
     thread  表示执行的独立线程,用于执行协同程序
     table  

    我们可以使用 type 函数测试给定变量或者值的类型:

    print( type(nil) )                             -- nil
    print( type(true) )                            -- boolean
    print( type(10.4 * 3) )                        -- number
    print( type("Hello world") )                  -- string
    print( type(print) )                           -- function
    print( type({"a", "b", "c", "d"}) )            -- table

    nil

    nil 类型表示一种没有任何有效值,它只有一个值 nil,例如打印一个没有赋值的变量,便会输出一个 nil 值:

    > print(undefined_value)
    nil

    对于全局变量和 table,nil 还有一个 “删除” 作用,给全局变量或者 table 表里的变量赋一个 nil 值,等同于把它们删掉。

    boolean

    boolean 类型只有两个可选值:true 和 false,Lua 把 false 和 nil 看作是 “”,其他的都为“”。

    string

    字符串由一对双引号或单引号来表示。

    > print("it's ok")
    it's ok
    > print('This is a "hello world" program')
    This is a "hello world" program

    也可以用 2 个方括号 “[[]]” 来表示一块字符串。

    html = [[
    <html>
        <body>
            <a href="http://www.lua.org/">Lua</a>
        </body>
    </html>
    ]]

    使用 “..” 拼接字符串:

    > print("hello" .. "world")
    helloworld

    使用 “#” 计算字符串长度:

    > print(#"abcdefg")
    7

    循环

    while 循环

    while(condition)
    do
       statements
    end

    for 循环

    数字 for 循环

    for v = e1, e2, e3 do block end

    v 从 e1 变化到 e2,每次变化以 e3 为步长递增 v,并执行一次 block。e3 是可选的,如果不指定,默认为 1。

    泛型 for 循环

    for i, v in ipairs(a)
    do
        -- do something with i & v
    end 

    i 是数组索引值,v 是对应索引的数组元素值。ipairs 是 Lua 提供的一个迭代器函数,用来迭代数组。

    repeat ... until 循环

    repeat ... until 循环类似其他语言的 do ... while 循环。

    repeat
       statements
    while( condition )

    条件控制

    格式

    if exp then block {elseif exp then block} [else block] end

    函数

    定义:

    function max( a, b )
        if a >= b 
        then 
            return a
        else
            return b
        end
    end

    多返回值:

    function maxmin( arr )
        if #arr < 1
        then
            return nil, nil
        end
    
        local max = arr[1]
        local min = arr[1]
        for i, v in ipairs(arr) do
            if arr[i] > max
            then
                max = arr[i]
            end
            if arr[i] < min
            then
                min = arr[i]
            end
        end
        return max, min
    end

    max, min = maxmin({2, 4, 3, 0, 1})

    可变参数:

    function average(...)
        local sum = 0
        local args = {...}
        for i, v in ipairs(args) do
            sum = sum + v
        end
        return sum/#args
    end
    
    print(average(1, 2, 3, 4))

    运算符

    算术运算符

    +、-、*、/、%、^(乘幂)

    关系运算符

    ==、~=(不等于)、>、<、>=、<=

    逻辑运算符

    and、or、not

    其他运算符

    ..(拼接字符串)、#(计算字符串或 table 的长度)

    字符串

    字符串的常用操作

    -- 字符串全部转为大写字母
    string.upper("hello")                            -- HELLO
    
    -- 字符串全部转为小写字母
    string.lower("HELLO")                            -- hello
    
    -- 替换字符串
    string.gsub("tooth", "o", "e")                   -- teeth    2
    
    -- 查找字符串
    string.find("hello world", "or")                 -- 8    9
    
    -- 反转字符串
    string.reverse("Lua")                            -- auL
    
    -- 格式化字符串
    string.format("%4d-%02d-%02d", 2016, 1, 1)       -- 2016-01-01
    
    -- 将整型数字转成字符并连接
    string.char(97, 98, 99, 100)                     -- abcd
    
    -- 返回第一字符的 ASCII 值
    string.byte("ABCD")                              -- 65
    -- 返回第四字符的 ASCII 值
    string.byte("ABCD", 4)                           -- 68
    
    -- 返回字符串长度
    string.len("lua")                                -- 3
    
    -- 返回字符串的指定次数的拷贝
    string.rep("abc", 3)                             -- abcabcabc
    
    -- 拼接字符串
    "dead" .. "line"                                 -- deadline

    数组

    实例:

    #!/usr/bin/lua
    
    array = {"a", "b", "c"}
    for i= 0, #array do
        print(array[i])
    end

    输出为:

    nil
    a
    b
    c

    在 Lua 索引值是以 1 为起始的,如果知道的索引没有值则返回 nil。但是也可以使用 0 或负数作为索引:

    #!/usr/bin/lua
    
    array = {}
    for i= -1, 1  do
        array[i] = i * 2
    end
    for i= -1, 1  do
        print(array[i])
    end

    输出为:

    -2
    0
    2
  • 相关阅读:
    Pytorch-情感分类实战(基于LSTM,调用torchtext)
    Pytorch-LSTM
    Pytorch-时间序列预测
    Pytorch-RNN
    SQLServer -------- 包含(charindex)
    .NET ------ 树形菜单,点击单选按钮触发相应事件
    电子秤Xk3190-A12+E 称重方式的设置方法
    串口调试工具与com口编程
    .NET ------ Repeater 遍历数据显示在页面上
    .NET ------ 将弹窗内增加选项卡
  • 原文地址:https://www.cnblogs.com/huey/p/5650246.html
Copyright © 2011-2022 走看看