回答
可以的,如果測試而不是兩個這種代碼在一個簡化?
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(我的機器上是這樣),但差別很小。爲了清晰起見,我會與第一個一起去。
當'foo'爲'false'時,第一個和第三個不會做與第二個相同的事情。 – catwell
如何使用'#foo == 0'來檢查空字符串而不是'foo ==''' - 它有沒有更快的機會? –
這不是一個壞主意。 Lua字符串在內部保持其長度,因此您不必計數字符。但是Lua也實習字符串,因此檢查平等並不需要看字符;你只需檢查對象是否相同。所以這兩個*應該是快的,但是事實證明,檢索字符串長度的代碼路徑比代碼路徑稍微長一些,以便從VM堆棧中獲取兩個對象指針來比較它們,因此'#foo == 0'是在5.1和5.2以及5.3(由我的機器上的基準測定)中慢一點比'foo =='''慢一點。 – Mud
- 1. 檢查一個字符串是在python
- 2. 檢查字符串是一個數字
- 3. 檢查一個字符串是一個字符串模式
- 4. 檢查一個字符串是否是迴文不是
- 5. 檢查一個字符串是X還是不是X
- 6. 爪哇 - 檢查是否字符串在另一個字符串
- 7. 檢查文本是一個字符串
- 8. C - 檢查字符串是否是另一個字符串的子字符串
- 9. Lua:如何檢查一個字符串是否只包含數字和字母?
- 10. 檢查字符串是否包含單詞(不是一個句子字符串)
- 11. 檢查字符串是否包含字(不是子字符串!)
- 12. 檢查一個字符串是否不包含一些文字
- 13. Postgres查詢檢查一個字符串是一個數字
- 14. 檢查是否有任何字符串列表是在另一個字符串
- 15. 如何檢查是否一個字符串是在字符串的結束
- 16. 檢查一個NSString是否是一個html字符串?
- 17. 如何檢查一個字符串是否是一個HashMap
- 18. 如何檢查一個對象是否是一個字符串?
- 19. 檢查一個字符串是否是一個日期
- 20. 檢查一個字符串是否是一個有效的URI
- 21. 檢查字符串多少次是一個字符串
- 22. Applescript:檢查一個字符串是否包含空字符串?
- 23. 檢查字符串的子是另一個字符串
- 24. 檢查字符串是否以另一個字符串開頭?
- 25. 檢查一個字符串是否超過xx個字符而不通過strlen()來檢查整個字符串?
- 26. 檢查字符串開始,並在Lua
- 27. 函數檢查字符串的第一個字符是否是一個字母
- 28. 檢查一個字符串是否是其他兩個給定的字符串
- 29. 檢查一個字符串是否是在與Python
- 30. Python - 檢查一個字符串是以「是」還是「否」開頭?
那麼,你在測試什麼foo,bar或foo.bar?如果你有'foo.bar',你可以使用'local function test(foo,bar){if(foo.bar == nil或foo.bar =='')then foo.bar =「一些默認值「結束」,這將做的伎倆。 – Kamiccolo
foo = foo或「某個默認值」 –
假設你不希望foo'false'來計算你可以使用if(not foo)或者(foo =='')then ...',否則這就是儘可能短。 –