在Lua中,使用消息參數調用標準error()
函數輸出提供的錯誤消息,並且還打印堆棧跟蹤,例如,執行以下代碼:Lua:調用不帶參數的error()時沒有堆棧跟蹤?
print("hello")
error("oops!")
print("world")
會導致下面的輸出:
$ lua test.lua
hello
lua: test.lua:2: oops!
stack traceback:
[C]: in function 'error'
test.lua:2: in main chunk
[C]: ?
但是,調用error()
不帶參數似乎讓Lua中沒有打印堆棧跟蹤默默死去。執行此代碼:
print("hello")
error() // no arguments provided
print("world")
會導致這樣的輸出:
$ lua test2.lua
hello
的文件並沒有說明省略第一message
爭論什麼:
錯誤(消息[,水平])
終止最後一個被調用的保護函數並將消息返回爲 錯誤消息。函數錯誤從不返回。通常,錯誤在 消息的開頭處添加了一些有關錯誤位置的信息 。 level參數指定如何獲取錯誤位置。 對於級別1(默認值),錯誤位置是調用錯誤 函數的位置。級別2將錯誤指向稱爲錯誤的函數 被調用的位置;等等。通過級別0可以避免向消息添加錯誤位置信息 。
我想知道這是否是有意的行爲?海事組織,即使沒有提供消息,仍然可以打印堆棧跟蹤(也可以輸出一些默認文本,例如error
),因爲這就是assert()
函數的工作原理。
好吧,是的,我可以看到'message'是強制性的,但它仍然沒有它... –
@DmitryPashkevich它並沒有真正的工作,因爲'錯誤'需要'message'參數。否則它可能取決於函數的實現並可能導致其他錯誤。如果你真的想傳遞一個空字符串'error(「」)' –
@DmitryPashkevich因爲Lua可以使用不兼容的參數,所以'error'將接收第一個參數爲'nil'。 –