覆蓋使用者定義的類中的布林值評估

有時,在你自己的程式中為某種物件設定特定的 asBoolean 定義可能很有用。

/** an oversimplified robot controller */
class RunController {
    
    def complexCondition
    int position = 0
    
    def asBoolean() {
        return complexCondition(this);
    }
    def advanceTo(step) {
        position += step
    }
}
def runController = new RunController(complexCondition : { c -> c.position < 10 } )

assert runController
runController.advanceTo(5)
assert runController
runController.advanceTo(5)
// The limit has been reached : the controller evaluates to false
assert !runController

此程式碼顯示了一個過度簡化的機器人控制器,它檢查機器人的位置是否超過 10(帶有用於狀態評估的閉合)