Ruby: неявный блочный итератор - PullRequest
3 голосов
/ 07 октября 2011

Есть ли способ сделать это?вместо:

links.each do |link|
  link.color "red"
end

сделать итератор (между | |) неявным, вот так:

links.each do
  color "red"
end

Ответы [ 2 ]

3 голосов
/ 07 октября 2011

Я не уверен, что в данном случае это стоит усилий (и это добавляет ненужную сложность), но приятно знать, что вы можете сделать что-то вроде следующего:

proc = Proc.new { |i| i.color 'red' }
links.map(&proc)
3 голосов
/ 07 октября 2011

Я почти уверен, что это невозможно. Однако вы можете instance_eval каждый элемент, но Я, конечно, не рекомендую его без веской причины

foo = ["test","test2","foo","bar","foobar"]

foo.each do |f|
  f.instance_eval do
    p reverse
  end
end
...