2013-04-09 9 views
1

Выполнение кода here on eval.inПочему значение `sData` не равно нулю?

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?

+0

Сначала я хотел бы заполнить небольшие компоненты, прежде чем работать над более широкой областью проекта. При этом, насколько мне известно, 'find' никогда не возвращает' nil'. – Zyerah

+0

@Telthien Вы можете [пересмотреть это утверждение] (http://eval.in/15744). – hjpotter92

+0

Я отказался от своего ответа, так как теперь, когда я понимаю, о чем вы спрашиваете, я не знаю, что вызывает его. – Zyerah

ответ

1

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

+0

Тогда нет другого способа использовать find/match, чтобы 'sData' был' nil'? На самом деле это не сильно влияет, поскольку вместо этого я использовал if-statement. – hjpotter92

+0

@ hjpotter92 - Пустая строка и 'nil' - концептуально разные объекты, почему вы хотите их смешивать? –

Смежные вопросы