通常所有R的对象都是不可变的,具有复制修改语义。对于具有引用语义的environments
,情况并非如此。 R(iterators package)中的迭代器是使用environments
实现的,并且是可变的。这可能令人困惑。请考虑以下简单示例:
library(iterators)
it1 <- iter(1:4)
it2 <- it1
nextElem(it1)
# 1
nextElem(it2)
# 2
这不是大多数R用户所期望的。 问题是如何有效地制作迭代器的副本? 目前,对于上面的简单案例,我有一个凌乱的解决方案(借用this idea):
it1 <- iter(1:4)
it2 <- it1
it2$state <- as.environment(as.list(it1$state))
next_el(it1)
# 1
next_el(it2)
# 1
但我觉得我错过了一些东西,而且看起来也不像是一般的解决方案。