問題タブ [rust-result]

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 投票する
4 に答える
26480 参照

rust - Iterator::map が Result::Err を返したときに反復を停止してエラーを返すにはどうすればよいですか?

を返す関数がありますResult:

次に、次のように使用します。

map反復内で失敗した場合、どのように処理すればよいですか?

私は使用できることを知ってflat_mapいます。この場合、エラー結果は無視されます:

Resultのイテレータには、成功状態に応じて 0 または 1 のアイテムがあり、0flat_mapの場合は除外されます。

ただし、エラーを無視したくはありません。代わりに、コード ブロック全体を停止して新しいエラーを返すようにしたい (マップ内で発生したエラーに基づいて、または単に既存のエラーを転送する)。

Rustでこれを最もよく処理するにはどうすればよいですか?

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

error-handling - 成功した場合に結果のない関数からエラーを返す慣用的な方法は何ですか?

Rust では、回復可能なエラーを処理する慣用的な方法は Result を使用することだと思います。たとえば、この関数は明らかに慣用的です。

もちろん、単一の明らかな失敗状態を持つ関数もあるため、代わりに Option 型を使用します。慣用的な例は次のとおりです。

これはすべて、ドキュメントで直接対処されています。ただし、関数が失敗する可能性があるが、成功した場合に意味のある値がない場合については混乱しています。次の 2 つの関数を比較します。

これらのどれがより慣用的であるか、または実際のRustコードでより頻繁に使用されているかはわかりません. このような質問に対する私の頼りになるリソースは Rust の本ですが、これは「エラー処理」セクションでは扱われていないと思います。他の Rust ドキュメントについてもあまり運がありませんでした。

もちろん、これはかなり主観的なものに思えますが、どのフォームが慣用的であるか、またはあるフォームが他のフォームよりも優れている (または劣っている) 理由について述べている信頼できる情報源を探しています。(また、Go や Haskell など、「値としてのエラー」を多用する他の言語とこの規則を比較する方法にも興味があります。)

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

error-handling - エラーのない関数をResultでラップする慣用的なRustの方法は何ですか?

a を数値に解析し、strそれまたはエラーを返す関数があります

SaleError私のカスタムエラー構造体です。

解析後、結果値で他のチェックを行いたいです。たとえば、数値が で正かどうかをチェックしis_sign_positive()、そうでない場合は を発行しErr(SaleError)ます。

is_sign_positive()のみを返すため、bool私が行ったことは、この関数を作成することでした:

今、私はそれを次のように使用できます:

これはうまく機能しますが、との特定のSaleErrorインスタンスが必要なので、関数を使用したことに注意してください。value1value2or()

さて、私は常に特定のエラーがis_positive返されるのではなく、特定のエラーis_sign_positive()が必要になるので、関数を作成せずに使用できるようにラップすることは可能is_positiveですか?

そんな感じ:

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

rust - Rust が fn から結果エラーを返します: タイプの不一致

この関数がエラー結果を返すようにしたい:

エラーメッセージ

予想される構造体を使用するときにエラーメッセージを出力する方法がわかりません。

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

generics - すべての反復子を拡張する> タイプを変換する

元のエラーが転送される別のoverを生成するために、 がジェネリックであるIterator<Item = Result<Type, E>>すべての拡張特性を実装しようとしています。EIteratorResult<OtherType, E>

問題は、変換Type -> OtherTypeが失敗する可能性があることです (関数はf(t: Type) -> Result<OtherType, ConcreteError>.

したがって、反復Eは基礎となるイテレーターまたは具体的なエラー型から (ジェネリック) を返す可能性がありますが、これはもちろん不可能です。

これを実装する方法は?

最小限の例:

遊び場

エラー: