2013-04-09 77 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我創建了一個基於sDatanil的整個項目,我發現並非如此。


我已經用此塊

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

所以解決了麻煩,我不是在尋求解決,使這項工作。我只是問,爲什麼它不是nil的價值?

+0

在更廣泛的項目範圍上工作之前,我會先填入小部件。據說,據我所知,'find'永遠不會返回'nil'。 – Zyerah 2013-04-09 03:42:59

+0

@Telthien您可能想[重新考慮該聲明](http://eval.in/15744)。 – hjpotter92 2013-04-09 03:48:12

+0

我收回了我的回答,既然我明白你在問什麼,我不知道是什麼原因造成的。 – Zyerah 2013-04-09 04:27:53

回答

1

爲什麼它應該是nil
模式.*與空字符串成功匹配。
nil表示「找不到匹配」。
example

+0

那麼沒有其他方法可以使用find/match來使'sData'成爲'nil'嗎?它實際上並沒有太大的影響,因爲我已經使用了if語句。 – hjpotter92 2013-04-09 11:27:58

+0

@ hjpotter92 - 空字符串和'nil'在概念上是不同的對象,爲什麼你要混合起來? – 2013-04-09 11:36:40

相關問題