Czy istnieje sposób wywołania funkcji Scala, która przyjmuje indywidualne parametry, z podaniem tablicy (podobnej do JavaScript Spreads w ECMAScript 6)?Parametry "Spread" w Scali?
ys = [10.0, 2.72, -3.14]
f(x, ...ys);
Najczystsze składnia byłoby:
f(1, ys)
ale to nie wydaje się być możliwe. Nawet f(1, ys:_*)
nie działa (ani nie ma wartości f(ys:_*)
, ponieważ kompilator zgłasza za mało parametrów - wypełniany jest tylko pierwszy).
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
przypadku użycia: wstrzyknięcie danych testowych (z kolekcji) do istniejących metod, które przyjmują poszczególne parametry. Ponieważ są to przypadki testowe, jest całkiem w porządku, jeśli liczba znaków w ys nie jest zgodna i daje albo błąd wykonania, albo niepoprawny wynik.
Pytanie brzmi, czy Scala umożliwia czystą składnię wywołania funkcji, która przyjmuje indywidualne parametry, biorąc pod uwagę zbiór parametrów - nie, czy jest to dobry projekt (chociaż opinie są z pewnością mile widziane).
Co powinno się stać, gdy 'ys' ma mniej niż 3 elementy lub więcej? – huynhjl
Przeciążanie funkcji 'f' jest tym, co przychodzi na myśl. Umożliwiłoby to wywołanie funkcji w sposób podany przez użytkownika, ale w innych sytuacjach może się nie powieść –