2

コンテキスト: 私は Rust と WebAssembly を学んでおり、練習問題として、Rust コードから HTML キャンバスにペイントするプロジェクトを持っています。Web リクエストからクエリ文字列を取得したいので、そこからコードでどの描画関数を呼び出すかを決定できます。

?この関数は、先頭を削除してクエリ文字列を返すように記述しました。

fn decode_request(window: web_sys::Window) -> std::string::String {
    let document = window.document().expect("no global window exist");
    let location = document.location().expect("no location exists");
    let raw_search = location.search().expect("no search exists");
    let search_str = raw_search.trim_start_matches("?");
    format!("{}", search_str)
}

それは機能しますが、私が使用した他の言語のいくつかでどれだけ簡単になるかを考えると、驚くほど冗長に思えます。

これを行う簡単な方法はありますか?それとも、冗長性はRustでの安全のために支払う代償にすぎないので、慣れる必要がありますか?

@IInspectable からの回答ごとに編集: 連鎖アプローチを試したところ、次のエラーが発生しました。

temporary value dropped while borrowed

creates a temporary which is freed while still in use

note: consider using a `let` binding to create a longer lived value rustc(E0716)

それをよりよく理解できれば幸いです。私はまだ頭の中で所有権の素晴らしさを得ています。今でしょ:

fn decode_request(window: Window) -> std::string::String {
    let location = window.location();
    let search_str = location.search().expect("no search exists");
    let search_str = search_str.trim_start_matches('?');
    search_str.to_owned()
}

これは確かに改善です。

4

1 に答える 1