Этот минимальный пример может объяснить лучше, почему то, что вы хотите сделать, не разрешено:
def f(a: Int, b: Int, c: Int, rest: Int*) = a + b + c + rest.sum
val ns = List(99, 88, 77)
f(11, 22, 33, 44, ns:_*) // Illegal
f(11, 22, 33, ns:_*) // Legal
f(11, 22, ns:_*) // Illegal
По сути, вы можете использовать синтаксис :_*
только для передачи последовательности непосредственно в качестве параметра vararg rest
, но это все или ничего. Элементы последовательности не разделяются между параметрами simple и vararg, и параметр vararg не может собирать значения как из простых аргументов, так и из предоставленной последовательности.
В вашем случае вы пытаетесь вызвать Row
, как если бы он имел два простых параметра, а затем переменный vararg, но это не так. Когда вы сами создаете последовательность, вы корректно вписываете ее в подпись.
Обратите внимание, что в динамически типизированных языках программирования это, как правило, не является проблемой. Например, в Python:
>>> def f(a, b, c, *rest):
return a + b + c + sum(rest)
>>> ns = [99, 88, 77]
>>> f(11, 22, 33, 44, *ns)
374
>>> f(11, 22, 33, *ns)
330
>>> f(11, 22, *ns)
297