Possible Duplicate:
What does map(&:name) mean in Ruby?
Я смотрел телепередачу и увидел этот код.
[Category, Product].(&:delete_all)
Что касается очистки базы данных.
Я спросил о линии в IRC, и мне сказали
(&:delete_all)
был ярлыком для
{|model| model.delete_all}
Я тестировал это с помощью следующих
class ClassOne
def class_method
puts 1
end
end
class ClassTwo
def class_method
puts 2
end
end
[ClassOne, ClassTwo].each(&:class_method)
Я получил сообщение об ошибке
Wrong Argument type Symbol (expected Proc)
Я тоже пробовал
one = ClassOne.new
two = ClassTwo.new
[one, two].each(&:class_method)
Но это все равно не удалось.
Если бы я изменил его, чтобы читать
[one, two].each{|model| model.class_method}
Все заработало как положено.
Итак, что на самом деле делает &:delete_all? Документы говорят, что delete_all - это метод, поэтому я не понимаю, что здесь происходит.

Это зависит от расширения Ruby 1.9, которое может быть реализовано в версии 1.8, включая следующее:
class Symbol
def to_proc
proc { |obj, *args| obj.send(self, *args) }
end
end
Я считаю, что Rails определяет это в ActiveSupport.
Это некоторые специфические для Rails патчи для Ruby, символ для проверки.
Раньше этот ответ был правдой, но сейчас Ruby 1.8.6 и более ранние версии действительно унаследованы.
Это верно; если вы запустили свой тест в irb, это не сработает (при условии, что вы используете Ruby 1.8.x). Попробуйте еще раз в скрипте / консоли.