1. 程式人生 > >Scala 的引數檢查與斷言: require, assert, assume 和 ensuring

Scala 的引數檢查與斷言: require, assert, assume 和 ensuring

似乎 C/C++ 的程式設計人員相比於 Java 更偏愛於斷言,JDK 1.4 才開始引入 assert 的支援,但預設是關閉的,需要用 -ea 編譯選項開啟,否則程式碼中的 assert 語句全被忽略,一般會在單元測試中開啟該選項。簡單回顧一下 JDK 自帶的斷言,它用兩種寫法

assert object != null;
assert object != null : "object can't be null";

第一個引數是個 bool 值,斷言失敗只會籠統的丟擲java.lang.AssertionError 異常,並不區分是在檢驗方法引數還是中間運算結果。嚴謹來說我們會希望引數檢查不通過時丟擲 java.lang.IllegalArgumentException

; 而中間運算結果的斷言不過希望丟擲 java.lang.AssertionError, 最好是 java.lang.IllegalStateException

很多時候我們不會去使用 -ea 編譯選項,也就是主動放棄了 JDK 本身的斷言功能。介於兩個因素(不同的斷言錯誤和預設的斷言選項關閉),Scala 為我們提供了更方便的引數檢查與斷言方法,它們來自於 Predef, 其所定義的方法可以直接使用