問題タブ [scala-option]
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.
java - Java コードで Java 関数を Scala Option に適用するにはどうすればよいですか
Scala Options Option[String]
、Option[Long]
、および、Option[Boolean]
の Java コンシューマーが与えられた場合、Java コードで静的型チェックを使用してこれらをきれいに適用したいと考えています。問題はJava コードになるため、未チェックの型キャストが必要です。String
long
boolean
Option[Long]
Option[Boolean]
Option<Object>
私が見つけた他の解決策は、各プリミティブ型に特化した Scala 関数です。
しかし実際には、Java 側では後者の 2 つが似ているacceptIfDefinedLong(Option<Object>, Consumer<java.lang.Long>)
ため、実際には厳密な型チェックはありません。
- これどうやってするの?
- これをどのように一般化できますか?
- これをJavaで書くにはどうすればよいですか?
- それはまったく可能ですか?
Java から呼び出し可能である必要があり、未チェックのキャストがあってはなりません。
scala - play-json が Option[T] のタイプの空の文字列を None として読み取るようにする
play-json を使用して GitHub API から json を解析しようとしていますが、merge_commit_sha
プル リクエストのフィールドで問題が発生しました (ちなみに、このフィールドが非推奨であることは知っていますが、この解析の問題でそれについて議論したくありません!) . 残念ながらmerge_commit_sha
、場合によってはフィールドが空の文字列として返されます。
これは、フィールドが私のケースクラスで宣言される方法です:
Git ハッシュ ID の有効な値ではないため、空の文字列を許容しない暗黙的Format[ObjectId]
ながあります。Read[PullRequest]
また、プル リクエストですべてのフィールドの読み取りを個別に宣言するのではなく、引き続き使用したいplay-json マクロで生成された も使用しています。
"merge_commit_sha": ""
フィールドが Option であると宣言したので、 value として読み取られるようにしたいのですNone
が、これは現在起こっていることではありません。文字列が存在するため、Format[ObjectId]
が呼び出され、 が返されますJsFailure
。
私が試したことの 1 つはFormat[Option[ObjectId]]
、必要な動作で暗黙的を宣言することでしたが、マクロで生成されたRead[PullRequest]
.
java - Scala で一般的なデータ型の値を持つ Map を定義する
Java コードへの呼び出しからすべてのデータを収集できるように、Scala で Map を作成する必要があります。可能な値は、、、String
およびです。この Map を Scala で表現する方法はありますか? 次のようにオプションを設定しようとしていますが、そのタイプがどうあるべきかわかりません。Integer
Double
null
scala - Scala のオプション値またはデフォルト パラメーターを使用したメソッド呼び出し
私は Scala にかなり慣れていないので、気になる小さな小さな問題に遭遇しました。デフォルトのパラメーターを持つメソッドがあるとしましょう
および Option val opt: Option[String]
。オプション値 (定義されている場合) またはデフォルト パラメータを指定してこのメソッドを呼び出す方法は? つまり、明らかな解決策にもかかわらず
(おそらく長い)オブジェクトチェーンでメソッドを2回入力する必要がありますか?複数のオプション/デフォルトパラメータがあることは言うまでもありません...
私が思いつくことができるのは、役に立たないヘルパーだけです
しかし、高次関数でデフォルトのパラメーターについて言及できない場合...それだけです。メソッドのオーバーロードが同じ問題を引き起こすJavaの悪い昔を思い出します。
scala - scala マージ オプション シーケンス
val A = Option(Seq(1,2))
マージしval B = Option(Seq(3,4))
て新しいオプション シーケンスを生成したい
val C = Option(Seq(1,2,3,4))
これ
val C = Option(A.getOrElse(Nil) ++ B.getOrElse(Nil))
、
よりも速く、より慣用的に見える
val C = Option(A.toList.flatten ++ B.toList.flatten)
しかし、より良い方法はありますか?getOrElse
そして、より速くて軽いのは正しいtoList.flatten
ですか?
scala - オプションの Spark 2 データセット
失敗する可能性のある関数を使用してケースクラスのデータセットに解析する文字列のデータセットがあります(たとえば、解析しようとしたデータが使用できない場合)。そのため、関数は Option (Scala) を返します。したがって、Option[MyCaseClass] のデータセットになります。
Spark はそのデータセットを受け入れて処理しているようですがNone
、解析に失敗した場合に a を返す代わりに、 a を返しますSome(MyCaseClass(null, null...))
。
これを行うコードの例を次に示します。
そして、これがケースを説明するノートです
私の推測では、Option 値をシリアル化してから逆シリアル化するときに、Spark は、Option が Some か None かをチェックする代わりに、Some() コンストラクターを使用します。
のようなオブジェクトのラッパーを明らかに作成できますがMaybeArticle(article: Option[Article])
、Spark が Options のデータセットを適切に処理できるかどうかを知りたいですか?
scala - Scala の Future Options から Future オブジェクトを取得する
私は Java から Scala に慣れていないので、関数型プログラミングのことを理解するのはまだ少し難しいです。Play フレームワークにプロジェクトがあります。データベースにクエリを実行して、ID を持つ行を取得し、それらを html テンプレートに表示する必要があります。
これが私のコードです
getDocumentByID
Future[Options[Document]]
オブジェクトを返しますが、私のresults
テンプレートは取るArray[Document]
ので、に変換するのに役に立たなかっFuture[Options[Document]]
たArray[Document]
私が持っている現在のコードは私が行った中で最も近いものですが、それでもコンパイルされません。これはエラーです: