我是groovy的新手,我對'< <'運營商非常失望。我理解它是作爲一個bitshifter按如下方式使用:groovy <<令人困惑
def x = 2
x << 2 //x == 8
然而,bitshifter具有當封閉使用字符串中的另一個用途:
"${ w -> w << 3}" //w == 3
所以我的問題是:在什麼情況下呢'< <'充當賦值運算符?它在什麼情況下起到了一些障礙?
這第二個例子是真的是什麼讓我困惑:
def transform(List elements, Closure action) {
def result = []
elements.each {
result << action(it)
}
result
}
這似乎< <的作用類似於追加。那麼是否有一套關於'< <'的規則?對於每個數據結構,'< <'的行爲是否有所不同?有沒有一套規範的法規?在groovy的文檔中,我似乎無法找到任何關於此的內容,而是隨便拋入其中,在不同的示例中,這充分混淆了。
你的轉換也可以寫成'元素。收集{action(it)}',這樣會更容易混淆;) – cfrick 2014-11-03 18:36:57
快速規則:只要你看到'x << y',就認爲它是'x.leftShift(y)'那麼這只是理解任何'x'類型的JavaDocs都是。 – bdkosher 2014-11-03 20:36:18
我可以理解爲什麼它可能有點令人困惑,但它確實有道理。將'<<'運算符看作調用'leftShift'方法的簡寫。 'leftShift'方法在不同的類中可能會做出根本不同的事情。這類似於調用'java.util.ArrayList'上的'add'方法與調用'java.math.BigDecimal'上的'add'方法。這些是根本不同的類型,在這兩種情況下,「添加」意味着不同的事物。我希望有所幫助。 – 2014-11-03 21:02:20