在 ruby 中闭包的创建所用的对象不能包含数组索引,这个怎么办呢?
irb(main):032:0> def a
irb(main):033:1> act = []
irb(main):034:1> for i in (0..5) do
irb(main):035:2* act<<(Proc.new{|x| q=i; q**x})
irb(main):036:2> end
irb(main):037:1> return act
irb(main):038:1> end
irb(main):001:0> def a irb(main):002:1> act = [] irb(main):003:1> for i in (0..5) do irb(main):004:2* act<<(lambda{|x| i**x}) irb(main):005:2> end irb(main):006:1> return act irb(main):007:1> end
结果都是一样的。 在 python 中你可以这么设定闭包
def makeActions(): acts = [] for i in range(5): acts.append(lambda x, i=i: i ** x) return acts
acts = makeActions() # 0 ** 2 acts0 acts2 # 2 ** 2 acts4 # 4 ** 2
我想知道 ruby 中有没有这样的实现方式?