[英]What is the Groovy truth of an empty closure?
我試圖在 Groovy 中預測這段代碼的行為
userList.find { }
當find
方法被調用並傳遞一個閉包時,它返回將閉包計算為 Groovies 對true
理解的第一個元素。 當不帶任何參數調用find
方法時,它返回列表中第一個根據 Groovy 真理匹配為true
對象。
如果使用空閉包會發生什么?
null
?.find()
嗎?從Groovy閉包的正式定義 ( 替代來源 ):
閉包始終具有返回值。 該值可以通過閉包主體中的一個或多個顯式return語句指定,或者如果未顯式指定return,則指定為最后執行的語句的值。 如果最后執行的語句沒有值(例如,如果最后一個語句是對void方法的調用),則返回null。
對象引用
非空對象引用被強制為true。
...assert !null
這向我暗示了,空閉包的返回值的真相始終為假,因此find
永遠找不到任何東西,因此可能返回null
。
只有當您將此閉包委托給 Map 時,才沒有“空閉包”的定義,然后 Map 保持為空:
Map closureToMap(Closure c, Map attrs=[:]) {
c.resolveStrategy = Closure.DELEGATE_FIRST
c.delegate = attrs
c()
return attrs
}
def myEmptyClosure = {}
assert closureToMap(myEmptyClosure).isEmpty()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.