Ich halte Refactoring einige Methodensignaturen, die derzeit Parameter des Typs nehmen List
oder Set
von konkreten Klassen - List[Foo]
-wiederholt Parameter stattdessen zu verwenden: Foo*
.Kosten wiederholt Parameter der Verwendung
aktualisieren: Nach Argumentation ist fehlerhaft, entlang bewegen ...
Dies würde erlauben Sie mir die gleiche Methode Namen zu verwenden und es Überlastung basierend auf dem Parameter-Typ. Dies war unter Verwendung vonList
oderSet
nicht möglich, daList[Foo]
undList[Bar]
denselben Typ nach dem Löschen haben: .
In meinem Fall funktionieren die refaktorierten Methoden gut mit scala.Seq[Foo]
, die sich aus dem wiederholten Parameter ergibt. Ich müsste alle Aufrufe ändern und ein Sequenzargument Typ Annotation zu allen Sammlungsparametern hinzufügen: baz.doStuffWith(foos:_*)
.
Vorausgesetzt, dass der Wechsel von Collection-Parameter zu wiederholten Parameter semantisch gleichwertig ist, hat diese Änderung einige Auswirkungen auf die Leistung, denen ich bewusst sein sollte?
Ist die Antwort für scala 2.7._ und 2.8 gleich?
"Wenn der Aufruf mit: _ * erfolgt, wird das Objekt wie folgt übergeben:" Es ist nicht wahr, wenn ein Array [T] übergeben wird. scala> f (Array (1,2,3,4): _ *) res1: String = WrappedArray (1, 2, 3, 4) – Eastsun
@Eastsun Ah, ja, das 'Array'. Änderungen am 'WrappedArray' werden jedoch auch im' Array' reflektiert, so dass immer noch keine Elemente kopiert werden können. –