問題タブ [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.
rust - Iterator::map が Result::Err を返したときに反復を停止してエラーを返すにはどうすればよいですか?
を返す関数がありますResult
:
次に、次のように使用します。
map
反復内で失敗した場合、どのように処理すればよいですか?
私は使用できることを知ってflat_map
います。この場合、エラー結果は無視されます:
Result
のイテレータには、成功状態に応じて 0 または 1 のアイテムがあり、0flat_map
の場合は除外されます。
ただし、エラーを無視したくはありません。代わりに、コード ブロック全体を停止して新しいエラーを返すようにしたい (マップ内で発生したエラーに基づいて、または単に既存のエラーを転送する)。
Rustでこれを最もよく処理するにはどうすればよいですか?
error-handling - 成功した場合に結果のない関数からエラーを返す慣用的な方法は何ですか?
Rust では、回復可能なエラーを処理する慣用的な方法は Result を使用することだと思います。たとえば、この関数は明らかに慣用的です。
もちろん、単一の明らかな失敗状態を持つ関数もあるため、代わりに Option 型を使用します。慣用的な例は次のとおりです。
これはすべて、ドキュメントで直接対処されています。ただし、関数が失敗する可能性があるが、成功した場合に意味のある値がない場合については混乱しています。次の 2 つの関数を比較します。
これらのどれがより慣用的であるか、または実際のRustコードでより頻繁に使用されているかはわかりません. このような質問に対する私の頼りになるリソースは Rust の本ですが、これは「エラー処理」セクションでは扱われていないと思います。他の Rust ドキュメントについてもあまり運がありませんでした。
もちろん、これはかなり主観的なものに思えますが、どのフォームが慣用的であるか、またはあるフォームが他のフォームよりも優れている (または劣っている) 理由について述べている信頼できる情報源を探しています。(また、Go や Haskell など、「値としてのエラー」を多用する他の言語とこの規則を比較する方法にも興味があります。)
error-handling - エラーのない関数をResultでラップする慣用的なRustの方法は何ですか?
a を数値に解析し、str
それまたはエラーを返す関数があります
SaleError
私のカスタムエラー構造体です。
解析後、結果値で他のチェックを行いたいです。たとえば、数値が で正かどうかをチェックしis_sign_positive()
、そうでない場合は を発行しErr(SaleError)
ます。
is_sign_positive()
のみを返すため、bool
私が行ったことは、この関数を作成することでした:
今、私はそれを次のように使用できます:
これはうまく機能しますが、との特定のSaleError
インスタンスが必要なので、関数を使用したことに注意してください。value1
value2
or()
さて、私は常に特定のエラーがis_positive
返されるのではなく、特定のエラーis_sign_positive()
が必要になるので、関数を作成せずに使用できるようにラップすることは可能is_positive
ですか?
そんな感じ:
rust - Rust が fn から結果エラーを返します: タイプの不一致
この関数がエラー結果を返すようにしたい:
エラーメッセージ
予想される構造体を使用するときにエラーメッセージを出力する方法がわかりません。
generics - すべての反復子を拡張する- > タイプを変換する
元のエラーが転送される別のoverを生成するために、 がジェネリックであるIterator<Item = Result<Type, E>>
すべての拡張特性を実装しようとしています。E
Iterator
Result<OtherType, E>
問題は、変換Type -> OtherType
が失敗する可能性があることです (関数はf(t: Type) -> Result<OtherType, ConcreteError>
.
したがって、反復E
は基礎となるイテレーターまたは具体的なエラー型から (ジェネリック) を返す可能性がありますが、これはもちろん不可能です。
これを実装する方法は?
最小限の例:
エラー: