检查Lua中的字符串是否为空或空

时间:2013-10-29 17:02:26

标签: string lua

我目前使用以下语法编写了一些Lua代码:

if (foo == nil or foo == '') then
    foo = "some default value"
end

if条件的目标是测试foo既不是空字符串,也不是nil值。

如果测试而不是两个,可以将此代码简化为一个吗?

2 个答案:

答案 0 :(得分:45)

您可以做的一件简单事情是在函数内抽象测试。

local function isempty(s)
  return s == nil or s == ''
end

if isempty(foo) then
  foo = "default value"
end

答案 1 :(得分:12)

  

如果测试而不是两个,可以将此代码简化为一个吗?

nil''是不同的值。如果你需要测试s不是,IMO你应该只比较两者,因为它使你的意图最清楚。

使用生成的字节码和其他一些替代方案:

if not foo or foo == '' then end
     GETGLOBAL       0 -1    ; foo
     TEST            0 0 0
     JMP             3       ; to 7
     GETGLOBAL       0 -1    ; foo
     EQ              0 0 -2  ; - ""
     JMP             0       ; to 7

if foo == nil or foo == '' then end
    GETGLOBAL       0 -1    ; foo
    EQ              1 0 -2  ; - nil
    JMP             3       ; to 7
    GETGLOBAL       0 -1    ; foo
    EQ              0 0 -3  ; - ""
    JMP             0       ; to 7

if (foo or '') == '' then end
   GETGLOBAL       0 -1    ; foo
   TEST            0 0 1
   JMP             1       ; to 5
   LOADK           0 -2    ; ""
   EQ              0 0 -2  ; - ""
   JMP             0       ; to 7

Lua 5.1和5.2中的第二个是最快的(无论如何在我的机器上),但差别很小。为清楚起见,我会选择第一个。