Hier sind zwei einfache Blöcke, die dasselbe tun:
%Vor%Außer, dass der zweite immer ein bisschen schneller ist. Warum?
%Vor% Der Grund ist, dass index
eine Methode von Array
ist. Ruby wird (in C) über die Elemente iterieren und sie nacheinander an den Block übergeben.
Auf der anderen Seite sind all?
, none?
, one?
(die alle um 30% langsamer sind) Methoden von Enumerable
. Sie rufen each
auf, was zu einer C-Funktion führt, die zum Block führt. Der Unterschied im Timing ist auf die Tatsache zurückzuführen, dass zwei yield
s beteiligt sind.
Beachten Sie, dass spezialisierte Versionen von all?
et al. könnte auf Array
definiert werden und du würdest die gleiche Leistung bekommen wie index
, aber das wäre ein bisschen hässlich und überflüssig ...
Tags und Links ruby performance