Gibt es jemals einen Grund für eine Ruby-Methode, splat-list zurückzugeben?

8

Im Ruby-Quellcode lib/fileutils.rb , Methode mkdir_p sieht folgendermaßen aus, wenn vereinfacht:

%Vor%

Sowohl von dem, was ich über Ruby als auch vom Testen verstehe, hat es keinen Sinn, hier zu splattern. Gibt es einen Grenzfall, wo dies einen Unterschied macht?

Wenn es also keinen Edge-Fall gibt, in dem dies einen Unterschied in der Ausgabe macht, ist der Splat völlig harmlos oder veranlasst er irgendeinen Ruby-Interpreter, zusätzliche (unnötige) Arbeit zu verrichten?

    
Philip 12.03.2014, 01:43
quelle

1 Antwort

8

Es gibt tatsächlich Unterschiede zwischen return l und return *l ; es hilft zu wissen, wonach man Ausschau halten muss.

Ein wichtiger Unterschied besteht darin, dass eine Kopie des Array oder materialisierten Enumerators erstellt wird - in allen Fällen wird ein neues Array zurückgegeben.

%Vor%

Ein weiterer Unterschied ist, dass der splat-Operator nil auf ein leeres Array erzwingt und andere (nicht-Array / Enumerator) -Werte auf ein Array mit einem Element - wiederum ein neues Array - verweist wird in allen Fällen zurückgegeben.

%Vor%

Als solches hat die Verwendung von return *l subtile Implikationen, die hoffentlich gut genug durch die Methodendokumentation abgedeckt sind oder andererseits "nicht überraschend" sind.

    
user2864740 12.03.2014, 01:52
quelle

Tags und Links