問題タブ [either]
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.
scala - Scalaで例外をスローする、「公式ルール」とは
私はCourseraのScalaコースをフォローしています。OderskyのScalaの本も読み始めました。
私がよく耳にするのは、関数型言語で例外をスローするのは良い考えではないということです。なぜなら、それは制御フローを壊し、通常は失敗または成功のいずれかを返すからです。また、Scala2.10はその方向に進むTryを提供するようです。
しかし、本とコースでは、マーティン・オーダスキーは(少なくとも今のところ)例外が悪いとは言っていないようで、彼はそれらを頻繁に使用しています。また、メソッドがassert/requireになっていることに気づきました...
最後に、ベストプラクティスに従いたいので少し混乱していますが、それらは明確ではなく、言語は双方向に進んでいるようです...
その場合、誰かが私に何を使うべきか説明してもらえますか?
list - Haskell のリストから最初の権利を取る
まず、次Either
のように生成される s の(無限の) リストがあります。
リストにはいくつかRight
の s (常に有限数) が含まれ、同じLeft
値が繰り返されます。私が必要とするのは、すべてのRight
s とLeft
それらの後に 1 つを取ることです。この特定のケースでは、たとえば関数を変更することでも実行できますが、最善の一般的な方法にも興味があります。
scala - Iterable[Eith[A,B]] を [A, Iterable[B]] に削減する
Iterable[Either[Throwable, String]] を、Either[Throwable, Iterable[String]] に減らす必要があります。この操作がかなり一般的かどうかはわかりませんが、 Iterable トレイトには何も見つかりませんでした。だから私はこの関数を書いた:
これがそうでない場合、誰かがより良い方法を見つけるのを手伝ってくれますか?
haskell - どちらかの左側のマッピング
私のアプリのどこかで、Either ParserError MyParseResult
Parsecからを受け取ります。この結果の下流では、他のライブラリを使用して他の解析が実行されます。解析のその第2フェーズ中に、ある種のエラーが発生する可能性があります。これをとして渡したいのですLeft String
が、そのためには、結果をParsecからString
も変換する必要があります。Left
これを実現するには、関数を使用してマップを作成できる関数が必要ですshow
。
私が考えているマッピング関数は次のようになります。
しかし、私はhackagedbに一致するものが見つからなかったことに非常に驚いていました。だから今、私は自分の問題に対して正しいアプローチを使用しているかどうか疑問に思っています。
標準ライブラリにそのような関数がないのはなぜですか?私のアプローチの何が問題になっていますか?
haskell - Applicative関手とどちらかからの左
私はすばらしい本を読み進めてきましたが、Applicative Functor には少し苦労しています。
次の例max
では、2 つの Maybe ファンクターと return の内容に適用されますJust 6
。
以下の例ではLeft "Hello"
、Either ファンクターの内容の代わりに が返されるのはなぜLeft "Hello World"
ですか?
error-handling - EtherTはどのように機能しますか?
私は一日の半分を、コードのエラーに対処する方法として、EitherTを使用する方法を理解するために費やしています。
私はこのようなトランススタックを定義しました。
ReaderT
これは、 and関数のみを使用する限り非常にうまく機能しStateT
ます。私は今、私はこのようなものを書くことができるはずだという印象を受けています:
さらに重要なのは、パッケージからEither
可能なはずの戻り値を取得することです。hoistEither
errors
私はモナド変換子に関する現実世界のハスケルの章を読み、をいじりましたlift
。しかし、私はタイプチェックするものを何も得ることができません。
java - Javaのscala.Eitherを使用する
私はJavaのscalaライブラリ、具体的にはを返す関数を使用していますEither[A, B]
。私のJavaコードでは、次のことができます。
result.right()
を返しますがRightProjection
、Javaにインポートできません(IntelliJを使用)。Javaでどちらかのオブジェクトを処理する適切な方法はありますか?
scala - タプルからいずれかの左を収集するにはどうすればよいですか?
型が [String, A] (A は複数の型) である一連の Yiher に対して一致を実行した後、左側の文字列をリストに蓄積したいと考えています。
タプルにしようとする.productIterator.toList
と、List[Any] になってしまいます。失敗したケースを個別に処理すると (Rights と Lefts の組み合わせ)、指数関数的な数の case ステートメントが作成されます。
最後に List[Either[String, Any]] を取得して accLefts 呼び出しに渡すにはどうすればよいですか? それとも、試合以外のことをするべきでしたか?
scala - モナド操作
モナド操作に慣れ始めたばかりです。Option タイプについては、Tony Morris のチート シートが役立ちました: http://blog.tmorris.net/posts/scalaoption-cheat-sheet/
したがって、最終的には次のことを理解するのは簡単に思えます。
- map はオプション内の値を変換します
- 変身する許可を平らに
Option[Option[X]]
するOption[X]
Option[Option[X]]
flatMap はどういうわけか、 を生成してからフラット化するマップ操作ですOption[X]
少なくともそれは今まで私が理解していることです。
Each の場合、Either 自体は正しくバイアスされておらず、map / flatMap 操作がなく、射影を使用しているため、理解するのが少し難しいようです。
Scaladoc は読めますが、オプションのチート シートほど明確ではありません。誰かが基本的なモナド操作を説明するために、どちらかのシートチートを提供できますか?
それは私にEither.joinRight
は少し似RightProjection.flatMap
ているようで、どちらかの場合と同等のようOption.flatten
です。
Right がバイアスされている場合Either
、Either.flatten は、Either.joinRight ではないでしょうか?
この質問では、オプションと理解のためにEiherとの理解を求めていますが、答えの1つは、マップ/フラットマップ/フィルターに脱糖する方法のためにモナドを混在させることはできないと言っています。
この種のコードを使用する場合:
これは、3 つのメソッド呼び出しすべてが常に返さなければならないということEither[Error,Something]
ですか? メソッド呼び出しEither[Throwable,Something]
があるとうまくいかないということですか?
編集: Try[Something] は、右バイアスの [Throwable,Something] とまったく同じですか?