您尚未登录。

楼主 #1 2020-08-29 15:32:26

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,199
积分: 1139.5

请教,lua语言里的 if str ~= true 这句胡怎么理解?

下了合宙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就没有长度了吧,下面这几句就没意义了吧?

离线

#2 2020-08-29 15:59:09

xiaohui
会员
注册时间: 2019-01-15
已发帖子: 259
积分: 162.5

Re: 请教,lua语言里的 if str ~= 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了哦。

离线

楼主 #3 2020-08-29 17:07:29

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,199
积分: 1139.5

Re: 请教,lua语言里的 if str ~= true 这句胡怎么理解?

xiaohui 说:

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)

离线

#4 2020-08-29 18:33:42

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: 请教,lua语言里的 if str ~= true 这句胡怎么理解?

--在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)

离线

楼主 #5 2020-08-31 09:01:18

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,199
积分: 1139.5

Re: 请教,lua语言里的 if str ~= true 这句胡怎么理解?

达克罗德 说:

--在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。

离线

#6 2020-09-01 13:21:10

凿子树
会员
注册时间: 2017-10-17
已发帖子: 19
积分: 19

Re: 请教,lua语言里的 if str ~= true 这句胡怎么理解?

这种语言居然会有人用?写个那么短的代码都要费这么多脑浆,一个可用的东西得用几桶才够?

离线

楼主 #7 2020-09-01 16:39:44

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,199
积分: 1139.5

Re: 请教,lua语言里的 if str ~= true 这句胡怎么理解?

凿子树 说:

这种语言居然会有人用?写个那么短的代码都要费这么多脑浆,一个可用的东西得用几桶才够?

合宙全家都用Luat,买了他家的4g模块,还得学习下lua。

离线

#8 2020-09-01 21:34:01

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: 请教,lua语言里的 if str ~= true 这句胡怎么理解?

lua蛮好用的,我接触的第一个脚本语言就是lua。用它写了两个iOS游戏。
只能说这个楼主位的例子写得不太合理,倒不是lua本身的问题

离线

楼主 #9 2020-09-02 09:28:44

Gentlepig
会员
注册时间: 2018-10-24
已发帖子: 1,199
积分: 1139.5

Re: 请教,lua语言里的 if str ~= true 这句胡怎么理解?

现在有点明白了,参数str不一定是string变量。第一个if判断如果str是nil或false,则直接退出函数。经过第一个判断后,str可能是bool类型的true或者其它比如string或整型,那么第二个判断就是要吧bool类型的true剔除掉。

习惯了c,很难跳出思维习惯。合宙搞个micropython多好。

最近编辑记录 Gentlepig (2020-09-02 09:29:41)

离线

#10 2021-07-06 09:17:21

阿黄
会员
注册时间: 2018-10-03
已发帖子: 298
积分: 133

Re: 请教,lua语言里的 if str ~= true 这句胡怎么理解?

true 就是 非nil 非false  非0

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn