thể trùng lặp:
What does map(&:name) mean in Ruby?Hiểu [ClassOne, ClassTwo] .each (&: my_method)
Tôi đã xem một railscast và thấy mã này.
[Category, Product].(&:delete_all)
Về việc xóa cơ sở dữ liệu.
tôi hỏi về các dòng trong IRC và được cho biết
(&:delete_all)
là một phím tắt cho
{|model| model.delete_all}
Tôi thử nghiệm này như sau
class ClassOne
def class_method
puts 1
end
end
class ClassTwo
def class_method
puts 2
end
end
[ClassOne, ClassTwo].each(&:class_method)
tôi nhận được một lỗi nói
Wrong Argument type Symbol (expected Proc)
Tôi cũng đã cố gắng
one = ClassOne.new
two = ClassTwo.new
[one, two].each(&:class_method)
Nhưng điều đó vẫn thất bại.
Nếu tôi sửa đổi nó để đọc
[one, two].each{|model| model.class_method}
Tất cả mọi thứ đã làm việc như mong đợi.
Vì vậy, &:delete_all
thực sự làm gì? Các tài liệu nói delete_all
là một phương pháp, vì vậy tôi bối rối như những gì đang xảy ra ở đây.
Điều này là chính xác; nếu bạn chạy thử nghiệm của bạn trong irb, nó sẽ không hoạt động (giả sử bạn đang chạy Ruby 1.8.x). Hãy thử lại trong script/console. –