Nicht in dem Martin Odersky Ich kann nur raten :-) Wenn ich das Scaladoc von foreach
betrachte, sehe ich folgendes:
/** Applies a function `f` to all elements of this $coll.
*
* @param f the function that is applied for its side-effect to every element.
* The result of function `f` is discarded.
*
* @tparam U the type parameter describing the result of function `f`.
* This result will always be ignored. Typically `U` is `Unit`,
* but this is not necessary.
*
* @usecase def foreach(f: A => Unit): Unit
*/
So ist der Rückgabetyp von f
egal und sein Ergebnis wird immer verworfen. Dies bedeutet für mich, dass die Verwendung eines generischen Typparameters hier, um den Rückgabetyp zu markieren, nur eine subtile Dokumentation ist und sagt: "Der Rückgabetyp kann alles sein, wirklich alles, was du magst". Während ein Rückgabetyp von Any
(einigen) Lesern eine gewisse Einschränkung der hier anwendbaren Funktionstypen nahelegen kann.
Ein anderer Aspekt ist, dass Scala sehr bewusst entworfen wurde, um von Grund auf generisch zu sein. Also - für mich - die Verwendung eines generischen Typparameters steht hier im Einklang mit der allgemeinen Philosophie der Sprache, während die Verwendung von Any
- obwohl technisch verwendbar - ein definitiv nicht-generischer Ansatz wäre, der mit dem Rest der Sprache im Widerspruch stehen würde.
Ich habe keine Zeit, um ein Beispiel zu finden, aber ich vermute stark, dass es der Typinfinferator 'foreach' ignorieren soll, wenn es darum geht, den Rückgabetyp einer Funktion zu bestimmen. Aber ich kenne keinen Fall von oben, wo es wichtig wäre (d. H. Dass "Any" nicht zu demselben Schluss führen würde). –