Dies ist ein Memo, über das Onkel Java in Java nachgedacht hat, um die benutzerdefinierten Typen von Elm zu verstehen. Ich kenne Chokwagata nicht.
Nehmen Sie Ergebnis
als Beispiel für einen benutzerdefinierten Typ:
Elm Ergebnis Definition
type Result error value
= Ok value
| Err error
Ein Beispiel für eine Java-Darstellung des obigen "Ergebnisses":
Result.java
interface Result {
class Ok<V> implements Result {
final V value;
Ok(V value) { this.value = value; }
}
class Err<E> implements Result {
final E error;
Err(E error) { this.error = error; }
}
}
Beispiel für die tatsächliche Verwendung des Java-Versionstyps "Ergebnis":
Main.java
class Main {
public static void main(String[] args) {
show(validate("100")); // -> Ok: 100
show(validate("200hoge")); // -> Err:Bitte gebe eine Nummer ein
}
/**
*Stellen Sie sicher, dass Text eine Zeichenfolge ist, die nur aus Zahlen besteht.
* @param text Die zu überprüfende Zeichenfolge.
* @Ganzzahl, wenn der Rückgabetext nur aus Zahlen besteht.parseInt(text)Das Ergebnis von
*Ergebnis im Wertefeld gesetzt.Ok 。<br>
*Wenn der Text etwas anderes als Zahlen enthält"Bitte gebe eine Nummer ein"Zu
*Ergebnis im Fehlerfeld eingestellt.Err 。
*/
static Result validate(String text) { //"Ulme verstanden von den Grundlagen" P..91 Validierungsfunktionen sind das Ausgangsmaterial
try {
var n = Integer.parseInt(text);
return new Result.Ok<>(n);
} catch (NumberFormatException e) {
return new Result.Err<>("Bitte gebe eine Nummer ein");
}
}
/**
*Geben Sie den Inhalt des Ergebnisses in die Standardausgabe aus.
* @param result Der auszugebende Wert.
*/
static void show(Result result) {
if (result instanceof Result.Ok) {
var ok = (Result.Ok<Integer>) result;
System.out.println("Ok: " + ok.value);
} else if (result instanceof Result.Err) {
var err = (Result.Err<String>) result;
System.out.println("Err: " + err.error);
} else {
throw new RuntimeException("Der Mysterientyp ist angegeben");
}
}
}
Es ist ein Code, der nicht cool aussieht, weil er stark von der im Typparameter angegebenen "Ganzzahl" und "Zeichenfolge" abhängt und an der "Insutanceof" verzweigt. Ich glaube, ich habe nicht mein Bestes gegeben. ~~ In einer solchen Atmosphäre. ~~
Die aktuelle Wahrnehmung ist, dass die benutzerdefinierten Typen von Elm in Java so aussehen. Ursprünglich sollten Sie algebraische Datentypen richtig lernen, aber vorerst hat sich mein Verständnis verbessert (ich fühle), also Yoshi! Ich bin.
Recommended Posts