groovy 字符串是否也隐式地是一个集合?
Is a groovy String also implicitly a Collection?
groovy 中的弱输入很棒,但是这个让我摸不着头脑:
myList = new java.util.ArrayList(['foo', 'foo', 'foobar', 'barfoo'])
myList.removeAll('foo')
println myList // prints [foobar, barfoo]
removeAll
需要一个 Collection
作为参数。 Docs。为什么当我发送 String
时第 2 行有效 - groovy 字符串是否也隐式地是一个集合?
而是 Groovy 提供了对 JDK Collection
接口的增强,其中之一是 Collection::removeAll(Object[] data)
,这允许这样的行为:一个元素 foo
似乎隐式转换为单项数组,如 varargs
.
没有。 Groovy 添加了可以接受可变参数的 an extension method Collection.removeAll(Object[])
。您的 'foo'
变成了单元素数组。
以后在这样的方法上打个断点,Step Into;您会确切地看到传入的值是什么,以及您是在进入扩展方法还是其他意外情况。
groovy 中的弱输入很棒,但是这个让我摸不着头脑:
myList = new java.util.ArrayList(['foo', 'foo', 'foobar', 'barfoo'])
myList.removeAll('foo')
println myList // prints [foobar, barfoo]
removeAll
需要一个 Collection
作为参数。 Docs。为什么当我发送 String
时第 2 行有效 - groovy 字符串是否也隐式地是一个集合?
而是 Groovy 提供了对 JDK Collection
接口的增强,其中之一是 Collection::removeAll(Object[] data)
,这允许这样的行为:一个元素 foo
似乎隐式转换为单项数组,如 varargs
.
没有。 Groovy 添加了可以接受可变参数的 an extension method Collection.removeAll(Object[])
。您的 'foo'
变成了单元素数组。
以后在这样的方法上打个断点,Step Into;您会确切地看到传入的值是什么,以及您是在进入扩展方法还是其他意外情况。