Groovy 识别副本和修改在语义上的不同

一般的,不容易预先识别到一个方法修改的是接受者对象还是这个集合的副本,一些语言对于这个有命名约定,但是groovy没有这样做,因为在groovy中直接访问了java的方法,并且java方法的名称没有遵从这种约定,groovy设法适应java集合API:

 修改接受者对象的典型方法是没有返回一个集合,例如:add/addAll/remove/removeAll/retainAll,统计数量的sort方法。

 不修改接受者对象并且返回一个集合的方法,例如:grep/finAll/collect,统计数量的sort方法,是的sort方法这两者都是,因为它返回一个集合并且修改了接受者。

 修改接受者的方法有一个必要的名称,例如: add/addAll/remove/removeAll/retainAll/sort, collect/grep/findAll是一个有必要的,但是它们没有修改接受者而是返回的一个修改后的副本。

 先前的规则也适用于操作符,操作符对应的方法名称:<<leftShift方法是必须的并且修改了接受者对象(指list,不是字符串,在java中字符串不能修改);+plus方法不是必须的并且返回的是一个副本。

没有清晰的规则为你导航,当你不有疑问的时候,看看文档或者写一些断言代码。