Ich versuche, die right shift operator (>>
) in Rost zu implement a Maybe bind zu überlasten.Rost Shr Betreiber
enum Maybe<T> {
Nothing,
Just(T)
}
/// Maybe bind. For example:
///
/// ```
/// Just(1) >> |x| Just(1 + x) >> |x| Just(x * 2)
/// ```
impl<'a, T, U> Shr<|&T|: 'a -> Maybe<U>, Maybe<U>> for Maybe<T> {
fn shr(&self, f: &|&T| -> Maybe<U>) -> Maybe<U> {
match *self {
Nothing => Nothing,
Just(ref x) => (*f)(x)
}
}
}
fn main() {}
aber ich laufe in einen Fehler versucht, die Schließung aufzurufen:
<anon>:15:28: 15:32 error: closure invocation in a `&` reference
<anon>:15 Just(ref x) => (*f)(x)
^~~~
error: aborting due to previous error
playpen: application terminated with error code 101
Program ended.
Warum ist es falsch einem geliehenen Verschluss zu berufen, und wie kann ich das Problem beheben und implementieren die bind ?
Ich habe eine similar question auf Stackoverflow gefunden, aber Rost hat sich seit damals genug geändert, so dass es nicht mehr funktioniert.
Sie wissen, dass dies genau das, was 'Option.and_then' tut (obwohl es' self' verbraucht und so in der Lage, das Objekt nach Wert zu übergeben, anstatt durch Bezugnahme, die deutlich überlegen ist)? –