Почему `sData` не является нулевым значением?

Выполнение кода здесь на eval.in

sMessage = "<hjpotter92> +help|"
local _, _, sCmd, sData = sMessage:find( "%b<>%s[%+%-%*%/%!%#%?](%w+)%s?(.*)|" )
print( _, sData, sCmd  )

Выход из print говорит мой sData это значение с пустой строкой.

Почему это значение не nil ? Я создал весь проект на основе sData являющийся nil для такого случая, и я считаю, что это не так.


Я решил проблему с помощью этого блока

if sData:len() == 0 then 
    sData = nil 
end

Итак, я не ищу решение, чтобы сделать эту работу. Я просто спрашиваю, почему это не nil значение?

1 ответ

Решение

Почему это должно быть nil?
Вы получаете успешное соответствие шаблона .* с пустой строкой.
nil означает "совпадение не найдено".
пример

Другие вопросы по тегам