Errore con vararg per oggetti funzione in Scala?

Perché non funziona?

val f = (args: Int*) => args.sum error: ')' expected but identifier found. val f = (args: Int*) => args.sum ^ 

Questo tuttavia funziona perfettamente bene

 def sum(args: Int*) = args.sum val f = sum _ 

così fa questo

 val f: (Int*) => Int = args => args.sum 

btw. Sto usando scala 2.9.1

    Non sono un esperto nella lettura delle specifiche, ma sembra che la syntax varargs non sia supportata per la funzione anonima.

    Confrontare la syntax per la dichiarazione delle funzioni e le funzioni anonime nella specifica della lingua

    Da 4.6 Dichiarazioni e definizioni di funzione

     ParamType ::= Type | '=>' Type | Type '*' 

    6.23 Funzioni anonime

     Binding ::= (id | '_') [':' Type] 

    Non ho idea di quali siano le ragioni per questo. Sembrano esserci ragioni ma nessuna che possa essere facilmente spiegata. Martin Odersky ha commentato una richiesta di aggiunta di vararg per le funzioni anonime: “All’inizio sembra allettante, ma trascinerebbe molta complessità (devi solo credermi su quello).”

    C’è anche una buona spiegazione su questo dato da Lex Spoon qui qui

    La syntax è un po ‘fuorviante qui; forse è troppo carino La syntax Any * per varargs fa sembrare che Any * sia di per sé un tipo. In realtà, * è un’annotazione sul parametro metodo, non sul tipo.

    Quando scrivi un tipo di funzione usando la syntax T1 => T2, sia T1 che T2 devono essere semplici tipi di buona fede. Scala offre una gran quantità di tipi di tipi, ma i tipi di vararg non sono uno di questi.

    Nel codice pratico, la via d’uscita è usare esplicitamente un tipo di sequenza. Infatti, se si considera il tipo dedotto per good2, si vedrà che coinvolge Seq [Any] piuttosto che Any *.