LUA教程类型Strings-7

指字符的序列。lua是8位字节,所以字符串可以包含任何数值字符,包括嵌入的0。这意味着你可以存储任意的二进制数据在一个字符串里。Lua中字符串是不可以修改的,你可以创建一个新的变量存放你要的字符串,如下:

a = "one string"
b = string.gsub(a, "one", "another")   -- change string parts
print(a)          --> one string
print(b)          --> another string

string和其他对象一样,Lua自动进行内存分配和释放,一个string可以只包含一个字母也可以包含一本书,Lua可以高效的处理长字符串,1M的string在Lua中是很常见的。可以使用单引号或者双引号表示字符串

a = "a line"
b = 'another line'

为了风格统一,最好使用一种,除非两种引号嵌套情况。对于字符串中含有引号的情况还可以使用转义符\来表示。Lua中的转义序列有:

\a bell
\b back space               -- 后退
\f form feed                -- 换页
\n newline                  -- 换行
\r carriage return          -- 回车
\t horizontal tab           -- 制表
\v vertical tab
\\ backslash                 -- "\"
\" double quote             -- 双引号
\' single quote             -- 单引号
\[ left square bracket      -- 左中括号
\] right square bracket     -- 右中括号

例子:

> print("one line\nnext line\n\"in quotes\", 'in quotes'")
one line
next line
"in quotes", 'in quotes'
> print('a backslash inside quotes: \'\\\'')
a backslash inside quotes: '\'
> print("a simpler way: '\\'")
a simpler way: '\'

还可以在字符串中使用\ddd(ddd为三位十进制数字)方式表示字母。

"alo\n123\""和'\97lo\10\04923"'是相同的。

还可以使用[[...]]表示字符串。这种形式的字符串可以包含多行也,可以嵌套且不会解释转义序列,如果第一个字符是换行符会被自动忽略掉。这种形式的字符串用来包含一段代码是非常方便的。

page = [[
<HTML>
<HEAD>
<TITLE>An HTML Page</TITLE>
</HEAD>
<BODY>
Lua
[[a text between double brackets]]
</BODY>
</HTML>
]]
io.write(page)

运行时,Lua会自动在string和numbers之间自动进行类型转换,当一个字符串使用算术操作符时,string就会被转成数字。

print("10" + 1)             --> 11
print("10 + 1")             --> 10 + 1
print("-5.3e - 10" * "2")   --> -1.06e-09
print("hello" + 1)          -- ERROR (cannot convert "hello")

反过来,当Lua期望一个string而碰到数字时,会将数字转成string。

print(10 .. 20)      --> 1020

..在Lua中是字符串连接符,当在一个数字后面写..时,必须加上空格以防止被解释错。

尽管字符串和数字可以自动转换,但两者是不同的,像10 == "10"这样的比较永远都是错的。如果需要显式将string转成数字可以使用函数tonumber(),如果string不是正确的数字该函数将返回nil。

line = io.read()         -- read a line
n = tonumber(line)       -- try to convert it to a number
if n == nil then
    error(line .. " is not a valid number")
else
    print(n*2)
end

反之,可以调用tostring()将数字转成字符串,这种转换一直有效:

print(tostring(10) == "10")     --> true
print(10 .. "" == "10")         --> true

原文:LUA一个小巧脚本语言学习笔记

           LUA教程类型Strings-7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
luajit-jsonnet 是 针对google jsonnet的lua开发支持。 Name luajit-jsonnet - The Google Jsonnet( operation data template language) for Luajit Table of Contents NameDescriptioninstallMethodsnewmakeevaluate_fileevaluate_snippetevaluate_file_multievaluate_snippet_multidestroyDescription jsonnet is a domain specific configuration language that helps you define JSON data. Jsonnet lets you compute fragments of JSON within the structure, bringing the same benefit to structured data that templating languages bring to plain text. The example below illustrates a few features -- referring to another part of the structure, overriding object fields, and string operations...... luajit-jsonnet - Use the luajit ffi jsonnet interface calls and operation Google jsonnet documet: (http://google.github.io/jsonnet/doc/) install Simple executing the following command make installnew Create a luajit - jsonnet object local jso = require "jsonnet" jsonnet = jso:new()make Create a new Jsonnet virtual machine. syntax: res, err = jsonnet:make()evaluate_file Evaluate a file containing Jsonnet code, return a JSON string. syntax: res,err = jsonnet:evaluate_file("t.jsonnet")local jso = require "jsonnet" jsonnet = jso:new() jsonnet:make() res,err = jsonnet:evaluate_file("t.jsonnet") if err == nil then     print(res) else     print(err) endevaluate_snippet Evaluate a file containing Jsonnet code, return a JSON string. syntax: res,err = jsonnet:evaluate_snippet(snippet)local snippet = '{ person1: { name: "Alice", welcome: "Hello "   self.name   "!", }, person2: self.person1 { name: "Bob" },}' res,err = jsonnet:evaluate_snippet(snippet) if err == nil then     print(res) else     print(err) endevaluate_file_multi Evaluate a file containing Jsonnet code, return a number of JSON files. The returned character buffer contains an even number of strings, the filename and JSON for each syntax: res,err = jsonnet:evaluate_file_multi("t.jsonnet")evaluate_snippet_multi Evaluate a string containing Jsonnet code, return a number of JSON files. The returned character buffer contains an even number of strings, the filename and JSON for each syntax: res,err = jsonnet:evaluate_snippet_multi(snippet)destroy Shut down and release Jsonnet virtual machine. syntax: res,err = jsonnet:destroy(vm)local jso = require "jsonnet" jsonnet = jso:new() jsonnet:make() res,err = jsonnet:evaluate_file("t.jsonnet") jsonnet:destroy() 标签:luajit

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

511遇见

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值