Als «type-inference» getaggte Fragen

Typinferenz ist der Prozess des automatischen Ableitens von Typen für Programme unter Verwendung von Regeln, die von einem Typsystem definiert werden.

1
Was ist die Monomorphismusbeschränkung?
Ich bin verwirrt darüber, wie der Haskell-Compiler manchmal Typen ableitet, die weniger polymorph sind als erwartet, beispielsweise wenn punktfreie Definitionen verwendet werden. Es scheint, dass das Problem die "Monomorphismus-Einschränkung" ist, die bei älteren Versionen des Compilers standardmäßig aktiviert ist. Betrachten Sie das folgende Haskell-Programm: {-# LANGUAGE MonomorphismRestriction #-} import Data.List(sortBy) …

3
Wird Julia dynamisch getippt?
Viele Blogs und das Handbuch selbst sagen, dass Julia dynamisch getippt ist . Aber nach dem Lesen des Handbuchs klingt es für mich eher so, als wäre es statisch mit Typinferenz wie F # typisiert . Ist Julia statisch mit Typinferenz typisiert? Ist es dynamisch getippt? Ich gehe davon aus, …

4
Warum wird der Lambda-Rückgabetyp zur Kompilierungszeit nicht überprüft?
Die verwendete Methodenreferenz hat den Rückgabetyp Integer. Im Stringfolgenden Beispiel ist jedoch eine Inkompatibilität zulässig. Wie kann die Methodendeklaration withkorrigiert werden, um den Methodenreferenztyp ohne manuelles Casting sicher zu machen? import java.util.function.Function; public class MinimalExample { static public class Builder<T> { final Class<T> clazz; Builder(Class<T> clazz) { this.clazz = clazz; …

6
Warum kann Java keinen Supertyp ableiten?
Wir alle wissen, dass Long sich ausdehnt Number. Warum wird dies nicht kompiliert? Und wie definiert man die Methode withso, dass das Programm ohne manuelle Umwandlung kompiliert wird? import java.util.function.Function; public class Builder<T> { static public interface MyInterface { Number getNumber(); Long getLong(); } public <F extends Function<T, R>, R> …

2
Warum ist `std :: mem :: drop` nicht genau dasselbe wie der Abschluss | _ | () in höherrangigen Merkmalsgrenzen?
Die Implementierung von std::mem::dropist wie folgt dokumentiert: pub fn drop<T>(_x: T) { } Als solches würde ich erwarten, dass der Verschluss |_| ()(umgangssprachlich als Toilettenverschluss bezeichnet ) ein potenzieller 1: 1-Ersatz für dropbeide Richtungen ist. Der folgende Code zeigt jedoch, dass er dropnicht mit einem höherrangigen Merkmal kompatibel ist , …

1
Warum ist ein Typparameter stärker als ein Methodenparameter?
Warum ist public <R, F extends Function<T, R>> Builder<T> withX(F getter, R returnValue) {...} dann strenger public <R> Builder<T> with(Function<T, R> getter, R returnValue) {...} Dies ist eine Nachverfolgung von Warum wird der Lambda-Rückgabetyp beim Kompilieren nicht überprüft? . Ich fand mit der MethodewithX() wie .withX(MyInterface::getLength, "I am not a …

1
Unterschied zwischen Typinferenz von Methoden- und Klassentypparametern beim Mustervergleich
Warum funktioniert der Mustervergleich anders, wenn der Typparameter von einer umschließenden Methode stammt und nicht von einer umschließenden Klasse? Zum Beispiel, trait Base[T] case class Derived(v: Int) extends Base[Int] class Test[A] { def method(arg: Base[A]) = { arg match { case Derived(_) => 42 } } } gibt Fehler constructor …
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.