2014-10-20 51 views
0

我剛剛開始學習Groovy,它看起來非常棒!Groovy - 每種方法的字符串

這是一個非常簡單的例子。

"Groovy".each {a -> println a}; 

它很好地打印如下。

G 
r 
o 
o 
v 
y 

我的問題是 - '每個'方法不是根據下面的鏈接字符串對象的一部分。那麼它是如何起作用的?

http://beta.groovy-lang.org/docs/latest/html/groovy-jdk/

如何我可以得到一個對象的封閉的參數列表?

示例String.each有1個參數,Map.each有1或2個參數,如條目或鍵&的值。

+3

'在這種情況下each'將被綁定到'的方法對象' – 2014-10-20 21:41:12

+0

是的,我只是注意到它..感謝:) – KitKarson 2014-10-20 21:43:53

+0

@tim_yates:我很好奇。該文檔說它迭代iterator()方法返回的項目。 iterator()方法在迭代字符串的字符時被定義在哪裏? – 2014-10-20 21:53:33

回答

3

在DefaultGroovyMethods相關的代碼是

public static Iterator iterator(Object o) { 
    return DefaultTypeTransformation.asCollection(o).iterator(); 
} 

其中包含:

else if (value instanceof String) { 
    return StringGroovyMethods.toList((String) value); 
} 

字符串toList是:

public static List<String> toList(String self) { 
    int size = self.length(); 
    List<String> answer = new ArrayList<String>(size); 
    for (int i = 0; i < size; i++) { 
     answer.add(self.substring(i, i + 1)); 
    } 
    return answer; 
}