如何在每个闭包中访问父集合?

时间:2010-09-12 17:28:25

标签: ruby closures

我正在寻找替代*parent*的东西。

%w[apple apples].each do |w|
   next if *parent*.includes? w + "s"
   puts w
end

# output: apples

2 个答案:

答案 0 :(得分:4)

没有办法做到这一点。您必须先为该集合命名:

fruits = %w[apple apples]
fruits.each do |w|
   next if fruits.includes? w + "s"
   puts w
end

答案 1 :(得分:4)

each是一种惯例,对于一般的块或特别是传递给每个块的块,没有“父集合”的概念。只需命名,例如

(parent = %w[apple apples]).each do |w|
  next if parent.includes? w + "s"
  puts w
end

您可以添加其他方法来传递父级

例如

module Each2
 def each2
   each { |elem| yield(self, elem) }
 end
end

include Each2

%w[apple apples].each2 do |parent, w|
  next if parent.includes? w + "s"
  puts w
end

但这很愚蠢。