Closed
Description
The following code fails with:
argparse.rs:31:24: 34:21 error: mismatched types: expected `core::option::option<&str>` but found `core::option::option<&selfstr>` (reference with lifetime &self as defined on the block at 21:45 does not necessarily outlive reference with lifetime & as defined on the block at 21:45)
argparse.rs:31 banner: match self.banner {
argparse.rs:32 none => { none }
argparse.rs:33 some(value) => { some(value) }
argparse.rs:34 },
error: aborting due to previous error
mod argparse {
use std;
import std::map;
import either::{either, left, right};
struct Flag {
name: &str;
desc: &str;
short_name: option<&str>;
max_count: uint;
banner: option<&str>;
mut value: uint;
}
fn flag(name: &str, desc: &str) ⟶ Flag {
Flag { name: name, desc: desc, short_name: none, max_count: 1, banner: none, value: 0 }
}
impl Flag {
fn short_name(self, s: &str) ⟶ Flag {
let new_banner : option<&str> = match self.banner {
none => { none }
some(value) => { some(value) }
};
Flag {
name: self.name,
desc: self.desc,
short_name: some(s),
max_count: self.max_count,
banner: match self.banner {
none => { none }
some(value) => { some(value) }
},
value: self.value
}
}
}
}
fn main () {
let f : argparse::Flag = argparse::flag(&"flag", &"My flag");
}
I would expect it to compile, given that the lifetime of the value inside the option will be the same as the lifetime of the other fields.
Metadata
Metadata
Assignees
Labels
No labels