下了合宙724的dtu代码。串口发送这里看不明白。
-- 串口写数据处理
function write(uid, str)
if not str or str == "" then return end
if str ~= true then
for i = 1, #str, SENDSIZE do
table.insert(writeBuff[uid], str:sub(i, i + SENDSIZE - 1))
end
log.warn("uart" .. uid .. ".write data length:", writeIdle[uid], #str)
end
if writeIdle[uid] and writeBuff[uid][1] then
if 0 ~= uart.write(uid, writeBuff[uid][1]) then
table.remove(writeBuff[uid], 1)
writeIdle[uid] = false
log.warn("UART_" .. uid .. " writing ...")
end
end
end
函数开头的两个if语句,
第一个是判断str是0或者str是""(不清楚这里是不是nil的意思),则退出函数;
第二个是判断不等于ture,则执行下面的语句。但如果不等于true,那就是false了,str什么情况下是false? 0或nil?如果是这样的话,str就没有长度了吧,下面这几句就没意义了吧?
离线
if not str or str == "" then return end 这是如果这个变量不存在或者为nil或者为空字符就退出。
if str ~= true then这里是str不为true,因为lua是弱类型脚本语言,write(uid, false)就是不为true了哦。write(uid, 1)就是不为true了哦。
离线
if not str or str == "" then return end 这是如果这个变量不存在或者为nil或者为空字符就退出。
if str ~= true then这里是str不为true,因为lua是弱类型脚本语言,write(uid, false)就是不为true了哦。write(uid, 1)就是不为true了哦。
感谢回复。不过还是不明白。
1,if not str 这里判断的是str不存在吧?不存在是不是nil?
if str == "" 这里判断str是不是等于空字符串?空字符串是不是nil?
2,write(uid, false)就是不为trule了,write(uid, 1)也是不为true?什么是false?什么是true?
最近编辑记录 Gentlepig (2020-08-29 17:09:52)
离线
--在Lua中 false nil表示为假,其它,0.。都表示为真
-- and or not
-- and 如果第一个要计算的操作数是假的话,返回第一个操作数,反之返回第二个操作数
print( 1 and 5) -- 5
print( 0 and 5) --5
print( false and 5) --false
print( nil and 5) -- nil
--or 如果第一个操作数是真的假,返回第一个操作数,反之返回第二个操作数
print( 1 or 5) -- 1
print(0 or 5) -- 0
print( nil or 5)--5
print(false or 5) --5
--not 永远返回的是true和false
print(not nil) -- true
print(not 1) --false
print(not 0) --false
print(not false) --true
你先网上看看基础语法教程吧
lua的逻辑判断和别的语言有些不同
最近编辑记录 达克罗德 (2020-08-29 18:40:52)
离线
--在Lua中 false nil表示为假,其它,0.。都表示为真
-- and or not-- and 如果第一个要计算的操作数是假的话,返回第一个操作数,反之返回第二个操作数
print( 1 and 5) -- 5
print( 0 and 5) --5
print( false and 5) --false
print( nil and 5) -- nil--or 如果第一个操作数是真的假,返回第一个操作数,反之返回第二个操作数
print( 1 or 5) -- 1
print(0 or 5) -- 0
print( nil or 5)--5
print(false or 5) --5--not 永远返回的是true和false
print(not nil) -- true
print(not 1) --false
print(not 0) --false
print(not false) --true你先网上看看基础语法教程吧
lua的逻辑判断和别的语言有些不同
那么,""是不是nil呢?
我没想到0也是true。
离线
这种语言居然会有人用?写个那么短的代码都要费这么多脑浆,一个可用的东西得用几桶才够?
离线
这种语言居然会有人用?写个那么短的代码都要费这么多脑浆,一个可用的东西得用几桶才够?
合宙全家都用Luat,买了他家的4g模块,还得学习下lua。
离线
lua蛮好用的,我接触的第一个脚本语言就是lua。用它写了两个iOS游戏。
只能说这个楼主位的例子写得不太合理,倒不是lua本身的问题
离线
现在有点明白了,参数str不一定是string变量。第一个if判断如果str是nil或false,则直接退出函数。经过第一个判断后,str可能是bool类型的true或者其它比如string或整型,那么第二个判断就是要吧bool类型的true剔除掉。
习惯了c,很难跳出思维习惯。合宙搞个micropython多好。
最近编辑记录 Gentlepig (2020-09-02 09:29:41)
离线
true 就是 非nil 非false 非0
离线