構造体に文を保存しようとしていて、あらかじめ初期化する必要があります。そうしないと、構造体はmatch文の内部では認識されません(さらにコードlet data = ...
を参照)。複数の呼び出しで構造体の変数を保存および取得するにはどうすればよいですか?
関数を2回呼び出すと(fn main
の部分に示されているように)、以前に保存された文を既定の初期化された構造体で上書きし、代わりにそれを返します。
安全でないグローバル変数を使用せずに "RET"の一致ステートメント内にその文を保存しておく方法はありますか?
#[derive(Default)]
struct Test {
satz: String,
}
impl Test {
pub fn testing(message: &str) -> Result<Option<String>, &'static str> {
let mut vs: Vec<&str> = message.split(' ').collect();
let mut i = 0;
while vs[i] != "\n" {
i += 1;
if i > vs.len() {
Err("wrong format.").unwrap()
}
}
vs.truncate(i);
let data: Test = Default::default();
match vs[0] {
"PUB" => {
let data = Test { satz: vs.join(" ") };
Ok(None)
}
"RET" => {
let x = data.satz;
Ok(Some(x))
}
_ => Err("wrong format.")
}
}
}
fn main() {
Test::testing("PUBLISH Hey this is a short message! \n");
let a = Test::testing("RETRIEVE \n").unwrap().unwrap();
println!("{:?}", a);
}
のようにそれを記述します:これは、大学や学校の割り当てのですか?もしそうなら、どの大学/学校ですか?^_^ –
あなたの質問について:私は残念ながら、あなたのプログラムが何をすべきか理解していません。 'PUB'と' PUBLISH'が混在しているので、今すぐパニックになります。しかしあなたの説明から、これはあなたが話している問題ではないようですので、私たちが主な問題に集中できるようにパニックを修正してください。しかし、もう一度:私はあなたが達成しようとしていることをよく分かりません。 1つのメソッドでゲッター/セッターを使いたいですか?これらのことを明確にするためにあなたの質問を修正してください、ありがとう:) –