Ответ 1
Не будучи Мартином Одерским, я могу только догадываться:-) Глядя на Scaladoc foreach
, я вижу это:
/** 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
*/
Таким образом, тип возврата f
не имеет значения, и его результат всегда отбрасывается. Это, как мне кажется, предполагает, что использование параметра типа generic для обозначения возвращаемого типа - это просто тонкость документации, говорящая: "Тип возврата может быть любым, действительно любым, вам нравится". В то время как тип возврата Any
может предложить (некоторым) читателям какое-то ограничение для применяемых здесь типов функций.
Другой аспект заключается в том, что Scala был очень сознательно разработан, чтобы быть общим с нуля. Итак, для меня - использование параметра общего типа здесь согласуется с общей философией языка, в то время как использование Any
- хотя и технически применимое - было бы определенно неосновным подходом, который был бы несовместим с остальной частью языка.