Parametry „Spread” w Scali?
Czy istnieje sposób na wywołanie funkcji Scala, która pobiera indywidualne parametry,podano tablicę (podobny do JavaScriptSpready w ECMAScript 6)?
ys = [10.0, 2.72, -3.14]
f(x, ...ys);
Najczystszą składnią byłoby:
f(1, ys)
ale to nie wydaje się możliwe. Parzystyf(1, ys:_*)
nie działa (i nie działa)f(ys:_*)
, ponieważ kompilator zgłasza zbyt mało parametrów - tylko pierwszy jest wypełniany).
Przykład:
def f (a:Int, b:Float, c:Float, d:Float): String
val x = 1
val ys = List(10.0, 2.72, -3.14) // note: non-Objects
val result = f(x, ys) // intuitive, but doesn't work
Przypadek użycia: wstrzykiwanie danych testowych (z kolekcji) do istniejących metod, które akceptują poszczególne parametry. Ponieważ są to przypadki testowe, jest całkiem w porządku, jeśli #params w ys nie pasuje do siebie i daje błąd wykonania lub niepoprawny wynik.
Pytanie brzmi, czy Scala pozwala na czystą składnię wywołania funkcji, która pobiera indywidualne parametry, biorąc pod uwagę zbiór parametrów - a nie to, czy jest to dobryprojekt (chociaż opinie są z pewnością mile widziane).