問題タブ [borrow-checker]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
rust - 値と特性への借用参照の両方で機能する構造体を作成できますか?
別の型をラップする構造体を作成したいのですが、特定の特性を実装する値の所有バージョンと借用バージョンの両方を取ることができます。
たとえば、私が特性を持っているとしましょうFoobar
:
この特性の値または借用した参照をラップする構造体を作成したいと思います。
Baz
ここでは、FoobarWrapper が両方で動作するようにしたいと考え&Baz
ていimpl Foobar for Baz
ます。
うまくいくかもしれない解決策を1つ思いつきましたが、それが慣用的であるかどうかはわかりません。それは単に行うことです:
私が間違っていなければ、これは Foobar の実装者でもある Foobar を実装する値への参照を作成します。しかし、これはあなたがそれを行うことになっている方法ですか?
rust - Vec はなぜ::split_at_mut スコープの残りのベクトルを借用しますか?
Vec<T>
次の 2 つの方法があります。
どちらもベクトルへの変更可能な参照を取ります。ただし、借用の範囲は異なるようです。たとえば、次のようになります。
関数はコンパイルされdoesnt_work
ず、変更可能な借用が既にnums
あり、それが終了し、関数の最後であると述べています。から返された値を無視すると、問題は解決しますsplit_at_mut
。
rust - この借用値エラーをどのように理解すればよいですか? Vec<&PathBuf> の構築
借用チェッカーのどの部分に違反しているのかを理解するにはどうすればよいですか?
Rust の標準ライブラリwalk_dir
は(2015 年 9 月 27 日の時点で) 「不安定」としてリストされているため、ディレクトリ内のすべてのファイルとその子ディレクトリを自分で取得する独自の関数を構築しようと考えました。
ディレクトリ内のファイルをリストするだけで、子ディレクトリの部分はまだ見ていないのは次のとおりです。
このコードを実行しようとすると、次のエラーが発生します。
間違っていたら訂正してください。しかし、Rust の優れた機能の 1 つは、オブジェクトが関数のスコープの後に存在することになっているときに明示的に宣言する必要があるという、非常に大雑把な理解です。私の問題は、PathBuf
作成されたlet p = path.unwrap().path()
ものが for ループの反復の最後に破棄されるため、output
Vec
なくなったものへの参照を保持していることだと思います。
そうだとすれば:
このようなばかげたことをしているときに、どうすればより良い直感を構築できますか?
寿命が限られているリソースを返す関数から要素のベクトルを構築するより良い慣用的な方法はありますか?
rust - 文字列のようなものの Vec を返す関数を取得するにはどうすればよいですか?
ファイルを開いて内容を 1 行ずつ検索し、一致する各行に対して何かを実行する大きなコード ブロックがありました。これを、ファイルへのパスを取得して一致する行を提供する独自の関数に分解したいのですが、これを正しく分解する方法がわかりません。
これは私が近いと思うものですが、コンパイルエラーが発生します:
そしてコンパイラエラー:
String
代わりに使用すると、&str
代わりにこのエラーが発生します。
どのような意味がありますか。行は関数の最後で範囲外になる内にとどまると思うbuffer
ので、文字列への参照のベクトルを収集してもあまり役に立ちません。
行のコレクションを返すにはどうすればよいですか?
string - `pop3::POP3Stream::connect` を使用して、`host` を指定してランタイムに接続しますか?
ユーザーからの入力を読み取り、それを POP3 ライブラリの URL として使用しようとしています。取得した を文字列スライスに変換するString
と、使用するのに十分な長さではありません。これは、次の 2 つの理由から私にとって奇妙です。
POP3 オブジェクトを使用するものはすべて同じブロック内にあるため、str スライスの有効期間はブロック全体の有効期間である必要があり、すべてをカバーします。
考えられるほぼすべての異なるコード構成を試しましたが、毎回同じエラーが発生します。
rust - 最後の要素に応じてベクトルに何かをプッシュする
ベクトルの最後の要素を取得し、それを使用して次にプッシュする要素を決定したいと思います。これが機能しない例を次に示しますが、私が達成しようとしていることを示しています。
push
ベクトルも不変に借用されている間は使用できません:
これを行うにはどうすればよいでしょうか。
rust - 借用したオブジェクトを一時的に保持するには
構造Parent
体フィールドには以下を格納する必要がありますOption
:
fn main()
を呼び出すまで、 でオブジェクトを操作する可能性を一時的にブロックする必要があります。.unbind()