簡體   English   中英

空閉包的 Groovy 真相是什么?

[英]What is the Groovy truth of an empty closure?

我試圖在 Groovy 中預測這段代碼的行為

userList.find { }

.查找文檔

find方法被調用並傳遞一個閉包時,它返回將閉包計算為 Groovies 對true理解的第一個元素。 當不帶任何參數調用find方法時,它返回列表中第一個根據 Groovy 真理匹配為true對象。

如果使用空閉包會發生什么?

  1. 它會評估為真,從而返回列表的第一個元素嗎?
  2. 它是否總是評估為 false 並在迭代列表后返回null
  3. 它的行為會像.find()嗎?

Groovy閉包的正式定義替代來源 ):

閉包始終具有返回值。 該值可以通過閉包主體中的一個或多個顯式return語句指定,或者如果未顯式指定return,則指定為最后執行的語句的值。 如果最后執行的語句沒有值(例如,如果最后一個語句是對void方法的調用),則返回null。

來自Groovy Truth

對象引用
非空對象引用被強制為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM