問題タブ [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.

0 投票する
1 に答える
1555 参照

rust - 要件が矛盾しているため、自動強制の適切な有効期間を推測できません

このエラーが発生しています - 「要件が競合しているため、自動強制の適切な有効期間を推測できません」。start_dutyただし、要件を明示的に適用しようとしました。

エラーを引き起こす私のコードのやや削除されたバージョン。概念的に、私がやろうとしているのは、Duty を参照する新しい Job を生成することです。ジョブは、義務の存続期間中のみ存在できます。義務がなくなると、仕事も同様になります。

0 投票する
1 に答える
576 参照

rust - Rust: エラー: `&`-pointer `*strm` の不変の逆参照を可変として借用できません

ボローチェッカーにまた出くわしてしまった…

エラーは次のとおりです。

ここで私の間違いは何ですか?

0 投票する
1 に答える
680 参照

rust - スライスで構造体を使用する場合、「借用した値が十分に長く存続しません」

編集者注: この質問のコードは Rust 1.0 より前のものです。それ以来、セマンティクスが変更され、質問で行われた主張の一部はもはや真実ではありません。

次のコードがあります。

&次のように(ie &[1, 2, 3])を使用してスライスを定義すると、println!

出力は

なしでスライスを定義する&

私に同じ結果を与える

最初に struct のインスタンスをバインドしようとするとA、そのaフィールドはスライスへの参照で初期化されます (つまり、 を使用&)、変数にx

println!そして、前のものと同様のことを実行しようとします

私は得る

Aただし、aフィールドがスライスに初期化されている (を使用したスライスへの参照ではない&) のインスタンスを変数にバインドすると、x

println!そして、前のものと同様のことを実行しようとします

次のビルド エラーが発生します。

型が必要A { a: &[1, 2, 3] }なので定義だけが許可されると思っていましたが、どうやら Rust ではシンボルを含めないように許可されているようです。A.a&[i64]&

A { a: &[1, 2, 3] }とはどう違いA { a: [1, 2, 3] }ますか?なぜ使用が許可されているA { a: [1, 2, 3] }のですか (上記の 2 番目の例)。

0 投票する
3 に答える
1989 参照

rust - 可変メンバーを反復処理しながら不変メソッドにアクセスする

Rust のイテレータについて学習しているときに、次の構造体を作成して、2 次元コレクションの実装を非表示にしました。

iterメソッドとメソッドの目的は、iter_mutこの構造体のユーザーが、データが行優先形式または列優先形式のどちらで格納されているかを気にする必要がないようにすることでした。イテレータは、最も効率的な順序で要素を提供するだけです。

ただし、このデータ構造を使用する場合、外部データを取得するために特定の行と列を知る必要があることがよくありました。

しかし、メソッドを呼び出そうとするとすぐにget_row_column、次のコンパイラ エラーが発生します。

ここでやろうとしていることを達成する正しい方法は何ですか? 行番号と列番号を取得し、行インデックスと列インデックスを明示的にループするメソッドを追加できsetますが、ユーザーは行優先と列優先の順序について心配する必要があります。

不変のメンバーとメソッドへのアクセスを許可しながら、構造体の内部メンバーを変更するための規則またはベストプラクティスはありますか? それとも、安全保証に完全に違反していますか?

0 投票する
1 に答える
8020 参照

rust - as_slice() を使用すると、「借用した値が十分長く存続しません」

エラーが発生しました:

エラー:

ただし、私にとっては、このコードは間違いではありません。なぜそのエラーが発生するのですか?

0 投票する
2 に答える
472 参照

rust - クロージャには、ラムダ関数への一意のアクセスが必要です

私は Rust を学んでおり、クロージャーを試すための簡単なコードを実装しましたが、解決方法がわからないというボローチェッカーの問題に直面しています。

次の関数をコンパイルする場合

次のエラーが表示されます

私はガイドに取り組んでおり、借用チェッカーがこれを好まない理由をある程度理解していますが、それを解決する方法がわかりません。

最初の呼び出しの結果を最初に一時変数に割り当ててから、f(..)これを再度呼び出すことで回避できます。しかし、これはエレガントではありません。

よりクリーンな/より良い書き方f(f(x))、またはこれが安全であることをコンパイラに納得させる方法はありますか?

0 投票する
1 に答える
2325 参照

data-structures - Rust vs Borrow Checker でのツリー トラバーサル

Rust でツリー構造を実装し、トラバースし、変更しようとしていますが、借用チェッカーで問題が発生しています。私のセットアップは多かれ少なかれ次のとおりです。

メソッドによって返されたノードを変更できるようにしたいので、ここに変更可能な参照があります。たとえば、addメソッドが呼び出しtraverse_pathて、一致するノードを持たないパスの残りのノードを追加します。

これにより、次のエラーが生成されます。

借用チェッカーがこのコードを好まない理由は理解できますが、これを機能させる方法がわかりません。

また、次のようなコードを使用して反復子を使用して別の実装を試みました。

ここでのエラーは、生涯に関連するものになりました。

私が興味を持っているもう 1 つのことは、decoration一致するノードのフィールドの値を収集し、パスが完全に使い果たされた場合にこれらの値を表示することです。私の最初の考えは、ノードからその親へのバックリンクを持つことでしたが、私が見つけた唯一の例RawlinkDList. 私の次の希望は、反復子の実装 (機能させることができれば) が自然にそのようなものに役立つことです。それは追求する正しい道ですか?