Angenommen, wir haben einen Klassenkonstruktor, der Parameter mit einem Standardwert akzeptiert.Scala liefert optional den Standardparameter
class A(val p1 : Int = 3, val p2 : Int = 4)
Sagen wir, ich habe keine Kontrolle über diese Klasse und kann sie nicht ändern. Ich möchte den Konstruktor von A aufrufen, mit p1 = 5, p2 = (wenn Bedingung1 == wahr ist, dann 5 anderer Standardwert). Eine Möglichkeit, dies zu tun ist,
if(condition1)
x = new A(5,5)
else
x = new A(5)
Wie Sie sehen können, dies leicht groß werden kann, wenn es viele Parameter sind und jeder muss bedingt geliefert werden. Was ich will ist etwas wie
x = new A(p1 = 5, p2 = <if condition1 = true then 5 else default>)
Wie kann ich das tun? Beachten Sie, dass die Felder in der Klasse A sind vals, so dass ich kann nicht sie ändern, nachdem A. Instanziieren
Ist es teuer, eine Wegwerf 'A' ohne Argumente zu erstellen, so dass Sie alle die Standardwerte lesen und sie später in' if' Ausdrücke verwenden? –
Ich dachte über diese Lösung nach. Es ist nicht teuer, aber fühlt sich ein wenig hacky. Ich möchte vermeiden, erste Standardparameter zu lesen, wenn möglich. – DSR
Werfen Sie einen Blick auf den letzten Abschnitt "Standardargumente" auf http://docs.scala-lang.org/sips/completed/named-and-default-arguments.html. Offenbar können Sie Methoden aufrufen, um die Standardwerte zu erhalten. BTW, wenn Sie etwas Gutes finden, bitte beantworten Sie Ihre eigene Frage! –