間隔を表す自分の構造体にカスタムDisplay::fmt
を実装しています。一致の式の寿命(!)が短すぎます
struct Range<T> {
lower: Option<T>,
upper: Option<T>,
}
範囲は、それが無限大(またはI仮定i32
の限界)までの1からすべての整数を含む意味し、Range { lower: Some(1), upper: None }
とすることができます。
私はバウンドがNone
ではなく、それ以外の場合は、空の文字列を表示する場合T
のDisplay::fmt
を使用するようにDisplay::fmt
を実装する:
let range = Range { lower: Some(1), upper: None }
println!("{}", range); // Prints <1,>
let range = Range { lower: Some(1), upper: Some(10) }
println!("{}", range); // Prints <1,10>
let range = Range { lower: None, upper: Some(10) }
println!("{}", range); // Prints <,10>
私は私の実装を開始したが、match
発現とのトラブルを持っていますformat!()
によって生成された文字列の存続期間。私の実装での問題は、formatによって返された文字列が、それ以上使用できないほど長くは存続しないということです。
fn main() {
let opt = Some(1);
let opt_display = match opt {
Some(x) => &format!("{}", x), // error: borrowed value does not live long enough
None => "",
};
println!("opt: {}", opt_display);
}
私のアプローチはうまくいかず、私の問題の良い解決策は何ですか?
は偉大な答えをいただき、ありがとうございます。なぜ私の解決策がうまくいかなかったのか、私の問題に複数の解決策を提示していることから、私はShepmasterの答えを受け入れることにしました。 – runfalk