Supponiamo di disporre di un costruttore di classi che accetta parametri con valore predefinito.Scala fornisce facoltativamente il parametro predefinito denominato
class A(val p1 : Int = 3, val p2 : Int = 4)
Diciamo che non ho il controllo su questa classe e non posso modificarlo in alcun modo. Quello che voglio fare è chiamare il costruttore di A con p1 = 5, p2 = (se condition1 == true quindi 5 altro valore predefinito). Un modo per farlo è
if(condition1)
x = new A(5,5)
else
x = new A(5)
Come si può vedere, questo può facilmente ottenere grande se ci sono molti parametri e ciascuno devono essere forniti in modo condizionale. Quello che voglio è qualcosa come
x = new A(p1 = 5, p2 = <if condition1 = true then 5 else default>)
Come posso farlo? Si noti che i campi in classe A sono vals, così non posso cambiarle dopo un'istanza A.
E 'costoso per creare un usa e getta 'A' senza argomenti in modo da poter leggere tutti i suoi valori di default e usarle in seguito in' if' espressioni? –
Ho pensato a questa soluzione. Non è costoso ma si sente un po 'hacky. Vorrei evitare di leggere prima i parametri predefiniti, se possibile. – DSR
Dai un'occhiata all'ultima sezione, "Argomenti predefiniti" su http://docs.scala-lang.org/sips/completed/named-and-default-arguments.html. Sembra che puoi chiamare i metodi per ottenere i valori predefiniti. A proposito, se vieni con qualcosa di buono, per favore rispondi alla tua stessa domanda! –