Manchmal möchte man vielleicht x
als den gleichen Typ wie y
deklarieren. Mit vals
behandelt Inferenz dies sehr gut, aber dies funktioniert nicht in einigen anderen Bereichen, wie with function types.Warum Scala hat keinen Deklinktyp?
Eine Lösung, die einem Programmierer mit etwas C++ Erfahrung offensichtlich erscheint, wäre ein decltype. In der heutigen Scala scheint keine solche Einrichtung vorhanden zu sein.
eine Antwort auf die Fragen im Zusammenhang erzählt:
Bürger Klasse I sind diese nicht zuerst nicht verstehen, muss ich zugeben. Ich glaube nicht, dass Typen in C++ erstklassige Bürger sind, aber trotzdem kann es dieweil Typen
decltype
haben. Ich frage nicht nach etwas wie
decltype
für Typ-Parameter in Generika oder ähnliches (ich verstehe Generika sind keine Vorlagen und die Typen sind in ihnen gelöscht). Dennoch denke ich, dass ein Operator, der mir erlauben würde, einen Typ eines Ausdrucks an einer Stelle zu verwenden, an der ein Typ erwartet wird - sicherlich muss der Compiler einen Ausdruckstyp auswerten können, andernfalls wäre eine Inferenz für die
val
Definition nicht möglich.
A decltype
könnte wie unten verwendet werden - der Code nichts, etwas Sinnvolles, versucht, genau das zu tun, die Syntax und die Grundlagen zu erläutern:
case class A(x:Int = 0)
val a = new A(10)
val b = new decltype(a)
def f(c:decltype(a)) : decltype(a.x+a.x)
Ist Abwesenheit von decltype
eine bewusste Entscheidung, oder gibt es einige spezifische Gründe, warum Scala es nicht haben kann? Gibt es vielleicht eine Lösung, die die Reflektion der Kompilierzeit nutzt, um dies zu ermöglichen?
Wie 'b' hier ins Spiel kommen ? –
@ m-z b ist hier nur ein Beispiel. In diesem speziellen Fall wäre es dasselbe wie val b = a, aber man kann sich leicht einen ähnlichen Fall vorstellen, in dem es nicht derselbe wäre. Ich werde versuchen, die Frage zu aktualisieren. – Suma
Ich verstehe die Frage nicht. Typensignaturen sind die Kompilierzeit, daher müssen Sie den Typ statisch angeben können. Was gibt dir dann dieses 'declype'-Ding? Was ist der "Nachteil" des regulären "val b: A = a" und "def f (c: A): A"? –