美文网首页Lua教程
Lua极简入门——类型(二)

Lua极简入门——类型(二)

作者: 李小磊_0867 | 来源:发表于2019-10-19 21:07 被阅读0次

    string

    字符串标识一个字符序列,采用8位编码。Lua字符串是不可变的值,创建后不能再修改内部字符,如果要进行改变字符串的原始值,则会创建新的字符串,原始字符串仍不变。在Lua中,字符串的标识方法可以使用单引号或者双引号进行界定。

    a = "hello lua,you are good"
    b = a
    a = "hello lua,you are good" .. ",step by step"
    print(a)
    -->> hello lua,you are good,step by step
    print(b)    -- 原来定义的字符串在内存中不变,修改后,会在内存中再创建一个字符串
    -->> hello lua,you are good
    

    字符串同其他语言一样,会有一些特殊字符再使用过程中,需要转义,其转义字符为反斜杠。常用的转义字符,除了以下还有其他的一些转义字符,这里只列出常用的,对于快速开发来说,足够了。如下所示:

    转义字符 含义
    \n 换行
    \r 回车
    \t tab,制表符
    \\ 反斜杠
    \" 双引号
    \' 单引号
    print("hello,\"lua\",\tThis is \'lua\' script,\nIt\'s very sharp.")
    -->> hello,"lua",   This is 'lua' script,
    -->> It's very sharp.
    

    如果在一个字符串中,需要大量使用转义字符,如有一段示例代码之类的,如果每个字符都使用转义符进行界定,工作量较大,且容易出错。针对这样的情况,Lua字符串可以使用包括在[[]]字符中间的任意字符块,而不需要使用转义字符,并且支持多行。

    a = [[
    "hello world"
    <t>
    dfadf
    </t>
    'lua is good'   haha
    tie
    ]]
    print(a)
    -->> "hello world"
    -->> <t>
    -->> dfadf
    -->> </t>
    -- 下面haha之前为制表符
    -->> 'lua is good'   haha
    -->> tie
    
    

    Lua对字符串与数字的设计,可以说是超越其他语言的设计,或者令人迷惑的设计。Lua对于字符串和数字提供了自动转换,当在字符串上应用数学运算符时,Lua会自动尝试将字符串转为数字,不需要显示转换。

    print(5 + "90")
    print("34" - "12")
    print("45" / "5")
    print("23 * 2")
    print("str" + 3)
    -->> 95.0
    -->> 22.0
    -->> 9.0
    -- 当运算符和数字字符串都包在一起,即运算符也是字符串时,lua不会进行自动转换和运算
    -->> 23 * 2
    -- 当字符串使用数学运算符链接,但字符串无法成功转为数字时,Lua将会抛出异常
    -->> attempt to perform arithmetic on a string value
    -->> stack traceback:
    -->> in main chunk
    -->> [C]: in ?
    

    上面是字符串使用数学运算符的自动转换,相反,如果数字间使用了字符串操作符,Lua也提供了将数字自动转换为字符串的操作。如Lua的字符串链接符为..,使用两个数字拼接,将得到字符串123 .. 456

    print(123 .. 456)
    -->> 123456
    

    需要注意,当使用字符串链接符操作数字时,数字和链接符必须使用空格分隔,因为..连接符与数字的小数点重合。

    基于以上,Lua提供了字符串与数字的转换,但有时候难于理解,并且也容易产生错误,在实际开发中,尽量采用显示转换,不要使用自动转换。

    实现数字字符串转换时,使用显示转换,Lua提供了两个内置方法:

    • tonumber 将一个字符串转为数字,当无法转为数字时,返回nil
    • tostring 将数字转换为字符串,等价于数字 .. ''
    print(tonumber("23") * tonumber("2"))
    print(tostring(123) .. tostring(456))
    

    通过在字符串前加上#前缀可获取字符串长度

    a = "hello world!"
    b = #a
    print(b)
    -->> 12
    print(#"hello lua.")
    -->> 10
    

    相关文章

      网友评论

        本文标题:Lua极简入门——类型(二)

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