Neue Antwort schreiben 
 
Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Rust: "Befehl" im "Befehl"
Blue Offline
Seit dem 17.10.2006 dabei!

Beiträge: 21.529
Registriert seit: Jul 2008
Beitrag #1
Rust: "Befehl" im "Befehl"
Hallöle,

folgende Funktion hab ich mir hergerichtet:

let x1: i32 = y1 + y2;

Als erstes initalisiere ich eine Variable die nicht veränderbar ist, i32-Datatyp aufweist und die folgenden Inhalt tragen soll, die Addition aus zweier früheren Variablen (y1, y2). Bisher ja ganz einfach.

Jetzt habe ich aber noch y3 die den Operanden entscheiden soll, die enthält entweder "+", "-", "/", "*" , nichts anders.

Jetzt kommt natürlich der Blue der sich in den Manuals eh nicht wirklich zurechtfindet und denkt sich was geiles aus:

let x1: i32 = y1 y3 y2 oder let x1: i32 = 'y1' 'y3' 'y2' oder wie man auch immer das Abgrenzen will.. gibts überhaupt eine Abgrenzung?

Natürlich.... funktioniert das nicht. War halt meine Vermutung weil ich glaube (!) das ich dies so ähnlich unter C leicht bewerkstelligen konnte.

Ich hatte auf der #GluehPN schon gandro gefragt, er meinte auch das dies unter Rust leider relativ "bescheiden" ist. So hatte ich dann gegoogelt und war schon irgendwann bei if, else.

Aber mal ehrlich, das kann doch nicht so umständlich sein? Ich möchte ja schließlich nur das er den eingegebenen Operanden da mit einsetzen. Mit if und else wird der Code ja unnötig vierfach oder achtfach so groß.

Übersehe ich hier jetzt was peinliches? Wenn ja, lacht mich aus und erzählt es mir. Ich bin gespannt.
28.11.2017 20:32
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Der Doktor Offline
%0|%0

Beiträge: 7.872
Registriert seit: Dec 2008
Beitrag #2
RE: Rust: "Befehl" im "Befehl"
If Else

Es ist besser nicht zu moderieren als falsch zu moderieren
28.11.2017 20:57
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
gandro Offline
Quälgeist

Beiträge: 8.950
Registriert seit: Jul 2008
Beitrag #3
RE: Rust: "Befehl" im "Befehl"
Wie im IRC schon geklärt ist ein match-Statement das einfachste und offensichtlichste. Die primitiven mathematischen Operationen sind in Rust wie in vielen anderen Sprachen (C, Java, Go, etc) nicht sogenannte Funktionen höherer Ordnung Funktionen die man herumreichen kann (anders als z.B. in Haskell). Es gibt jedoch abstrakte Interfaces in std::ops die zum Überladen der Operatoren gedacht sind, die hier verwendet werden können. Beispiel:

Code:
use std::ops::Add;

fn main() {
    let op = Add::<i32>::add;
    
    println!("{}", op(1, 2)); // 3
}

Eigentlich wollte ich jetzt schreiben, dass das fehlende Subtyping bei Traits in Rust dich daran hindert, einfach Code zu schreiben, der sowohl für Add als auch für z.B. Mul beides funktioniert. Allerdings bilden freistehende Funktionen (fn Typen) in Rust jedoch eine Ausnahme wo es Subtyping gibt weil sie alle als Funktionspointer verwendet werden können. Dementsprechend funktioniert folgender Code zu meiner kompletten Überraschung:

Code:
use std::ops::{Add, Div, Mul, Sub};

fn main() {
    let sym = "-";
    let op = match sym {
        "+" => Add::<i32>::add,
        "-" => Sub::<i32>::sub,
        "*" => Mul::<i32>::mul,
        "/" => Div::<i32>::div,
        _ => panic!("ungültiger Operator"),
    };

    println!("{}", op(1, 2)); // -1
}

Playground: https://play.rust-lang.org/?gist=662de9b...ion=stable

Man lernt halt nie aus. op ist dabei vom Typ fn(i32, i32) -> i32, also eine beliebige freistehende Funktion die zwei i32 nimmt und ein i32 zurückgibt.
(Dieser Beitrag wurde zuletzt bearbeitet: 28.11.2017 21:42 von gandro.)
28.11.2017 21:09
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Blue Offline
Seit dem 17.10.2006 dabei!

Beiträge: 21.529
Registriert seit: Jul 2008
Beitrag #4
RE: Rust: "Befehl" im "Befehl"
Nachdem noch ein paar &str und whitespaces probleme waren, hat der Code geklappt!

Danke!

http://pixelbanane.de/yafu/3627318012/ta...echner.exe
28.11.2017 22:24
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Playitlouder Offline
Hier könnte ihre Werbung stehen

Beiträge: 5.202
Registriert seit: May 2010
Beitrag #5
RE: Rust: "Befehl" im "Befehl"
(28.11.2017 20:32)Blue schrieb:  #GluehPN

Du/Ihr wart in Karlsruhe?
Hättet ja mal was sagen können :fresse:

.
28.11.2017 22:29
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Blue Offline
Seit dem 17.10.2006 dabei!

Beiträge: 21.529
Registriert seit: Jul 2008
Beitrag #6
RE: Rust: "Befehl" im "Befehl"
Hab ich 300000 mal
28.11.2017 22:35
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
freaked Offline
× ∫яεαкεδ εησυġн × ζιgнтѕтαя ×

Beiträge: 17.046
Registriert seit: Jul 2008
Beitrag #7
RE: Rust: "Befehl" im "Befehl"
(28.11.2017 20:57)Der Doktor schrieb:  If Else

Ur
28.11.2017 22:45
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Neue Antwort schreiben 


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste