我将用Julia进行说明:
假设我有一个名为counter()的闭包函数。
输出结果如下:
假设我有一个名为counter()的闭包函数。
function mycl()
state=0
function counter()
state=state+1
end
end
现在假设我创建了函数mycounter:
mycounter=mycl()
现在将此函数映射到一个长度为10,所有元素均为1的数组上。
map(x->x+mycounter(),ones(1:10))
输出结果如下:
julia> map(x->x+mycounter(),ones(1:10))
10-element Array{Int64,1}:
2
3
4
5
6
7
8
9
10
11
看起来这个函数是按顺序应用于要映射的数组。
最终我想避免使用for循环,但是由于闭包的局部状态变量会改变状态,我需要按顺序应用它。这似乎是这种情况,这是一种采用的标准吗?(还没有使用*apply测试等效的R版本)。而且,由于局部状态变量正在变异,这真的是“功能性”的吗?
reduce
或fold
(在Julia中叫什么都可以),而不是map
。map
的目的是创建一个新的容器,而不是执行副作用。 - Bergi