• 欢迎大家分享资料!前往留言板评论即可!

3、Air720SL模块Luat开发:实现用”Printf”把文

合宙 模组资料网 2年前 (2021-05-15) 319次浏览 0个评论 扫描二维码

目录

点击这里查看所有博文

一、前言

在我的第二篇博文中2、Air720SL模块Luat开发:第一个Luat的Hello World(在目录出可找到入口)我们用了一下
print函数实现打印Hello World到日志

在Lua语法中print函数可以接收任意字符串实现输出字符到日志
1、可以直接输出数字print(123)运行结果如下
3、Air720SL模块Luat开发:实现用
2、也可以直接字符print("abc")运行结果如下
3、Air720SL模块Luat开发:实现用
3、还可以混合输出print("abc"..123)运行结果如下
3、Air720SL模块Luat开发:实现用

但是print这个函数并不能用来格式化输出
如果我要输出一个可变化的字符串,不是说print函数不行,它也可以,但是却比较麻烦
比如我要输出下面这样一段字符串,其中标红的是需要随时改变的变量
Hello Tom!my name is:YXCN,I am 30 years old now

local other="Tom"
local name="YXCN"
local age=30
print("Hello "..other.."!".."my name is:"..name..",".."I am "..age.." years old now")

print输出,需要写一大段,还要自己用..组织字符串连接,一共用了八个字符串连接符,用了六对双引号
这个例子还好只有三个变量,就已经显得有点复杂,如果变量一多,想都不敢想。
这样写法阅读起来也是及其困难的,无法直接得出变量是什么类型的,可能是字符串,也可能是数字,还得回去看变量到底是什么值,这节课我们就一起学习一下怎么用Lua实现C语言的Printf格式化输出的功能

二、Printf格式化函数输出实现

在Lua里面没有printf函数,直接写会报错
3、Air720SL模块Luat开发:实现用

这里我们需要自己实现一下,代码如下

local function printf(...)
    print(string.format(...))
end

现在我们一起来试一下Hello Tom!my name is:YXCN,I am 30 years old now输出有多简单

local function printf(...)
    print(string.format(...))
end

local other="Tom"
local name="YXCN"
local age=30
printf("Hello %s ! my name is: %s , I am %d years old now",other,name,age)

对比两行printprintf的输出函数,printf函数格式化输出只用的一对双引号,结构清晰,能从语句中直接得出,需要输出的是什么格式的数据,很显然第一个转义码%s和第二个转义码%s代表的是字符串,第三个转义码%d代表的是数字
在Lua软件上直接输出结果如下,说明语法上是行得通的
3、Air720SL模块Luat开发:实现用

这里给出Lua支持所有的转义码
* %c – 接受一个数字, 并将其转化为ASCII码表中对应的字符
* %d, %i – 接受一个数字并将其转化为有符号的整数格式
* %o – 接受一个数字并将其转化为八进制数格式
* %u – 接受一个数字并将其转化为无符号整数格式
* %x – 接受一个数字并将其转化为十六进制数格式, 使用小写字母
* %X – 接受一个数字并将其转化为十六进制数格式, 使用大写字母
* %e – 接受一个数字并将其转化为科学记数法格式, 使用小写字母e
* %E – 接受一个数字并将其转化为科学记数法格式, 使用大写字母E
* %f – 接受一个数字并将其转化为浮点数格式
* %g(%G) – 接受一个数字并将其转化为%e(%E, 对应%G)及%f中较短的一种格式
* %q – 接受一个字符串并将其转化为可安全被Lua编译器读入的格式
* %s – 接受一个字符串并按照给定的参数格式化该字符串

下面我们将程序下载到开发板验证
# 三、下载程序到Air720Sl开发板

这里我们直接贴出全部代码

--必须在这个位置定义PROJECT和VERSION变量
--PROJECT:ascii string类型,可以随便定义,只要不使用,就行
--VERSION:ascii string类型,如果使用Luat物联云平台固件升级的功能,必须按照"X.X.X"定义,X表示1位数字;否则可随便定义
PROJECT = "LED"
VERSION = "0.0.1"
require "sys"
--加载日志功能模块,并且设置日志输出等级
--如果关闭调用log模块接口输出的日志,等级设置为log.LOG_SILENT即可
require "log"
LOG_LEVEL = log.LOGLEVEL_TRACE

local function printf(...)
    print(string.format(...))
end


local function user_main()
    local other="Tom"
    local name="YXCN"
    local age=30
    while true do
        printf("Hello %s ! my name is: %s , I am %d years old now",other,name,age)
        age = age + 1--一秒加一岁
        sys.wait(1000)
    end
end

--启动系统框架
sys.taskInit(user_main)
sys.init(0, 0)
sys.run()


下载程序后运行结果如下,一秒加一岁,现在已经240多岁了,哈哈
在这里插入图片描述
不会下载的点击这里,进去查看我的第二篇博文2、Air720SL模块Luat开发:第一个Luat的Hello World里面讲了怎么下载
这里只是我的学习笔记,拿出来给大家分享,欢迎大家批评指正,本篇教程到此结束


喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址