例子
此测试失败,因为each
不修改列表的元素。
void test_each_DoesNotModifyListElements() {
List<String> list = ["a", "b", "c"]
list.each { it = it + "z" }
assert ["az", "bz", "cz"] == list
}
这个测试通过了,因为collect
返回了一个包含修改过的元素的新列表。
void test_collect_ReturnsNewListWithModifiedElements() {
List<String> list = ["a", "b", "c"]
list = list.collect{ it + "z" }
assert ["az", "bz", "cz"] == list
}
假设
在这一点上,我假设它each
不会修改列表的元素,因为我已经编写了下面的测试并且我假设这就是测试告诉我的。如果我错了,请纠正我。
void test_each_DoesNotModifyListElements1() {
List<String> list = ["a", "b", "c"]
list.each { it + "z" }
assert ["az", "bz", "cz"] == list
}
void test_each_DoesNotModifyListElements2() {
List<String> list = ["a", "b", "c"]
list.each { it = it + "z" }
assert ["az", "bz", "cz"] == list
}
void test_each_DoesNotModifyListElements3() {
List<String> list = ["a", "b", "c"]
list = list.each { it = it + "z" }
assert ["az", "bz", "cz"] == list
}
问题
所以问题是:作为一个 Groovy 初学者,我应该怎么知道,在编写测试和谷歌搜索之前,这each
不会改变列表的元素?
通过阅读文档?
Groovy 每个文档:迭代聚合类型或数据结构,将每个项目传递给给定的闭包。自定义类型可以通过简单地提供“iterator()”方法来使用此方法。从结果迭代器返回的项目将被传递给闭包。
通常,我最终会花费大量时间尝试并在谷歌上搜索答案。不应该有更有效的方法吗?在那儿?