: _ * правильно.Кроме того, вы можете использовать toMap:
folder.listFiles map {file => file.getName -> file}.toMap
Map(...)
- это метод apply
в объекте Map
: def apply [A, B] (elems: (A, B)*): Map[A, B]
.У него повторный параметр.Ожидается, что он будет вызван с несколькими параметрами.: _ * Используется для указания того, что вы передаете все параметры как один аргумент Seq.
Избегает неясностей.В java (где эквивалентные varargs являются массивами вместо Seqs) возможна неоднозначность, если метод f(Object... args)
и вы вызываете его с помощью f(someArray)
, это может означать, что args имеет только один элемент, с someArray (поэтому fполучает массив только из одного элемента, который someArray
), или аргументы someArray
и f получает someArray
напрямую).Ява выбираю вторую версию.В scala с более богатой системой типов и Seq
, а не Array
неоднозначность может возникать гораздо чаще, и правило состоит в том, что вы всегда должны писать: _ * при передаче всех аргументов как одного, даже когда нет двусмысленностивозможно, как здесь, а не сложное правило, чтобы сказать, когда есть фактическая неопределенность.