問題タブ [partialfunction]
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: 部分関数エラー: PartialFunction として扱いたい場合は _ を使用してください
次のコードは機能しません: FileSystems.getDefault.getPath は java.nio パッケージからのものです。
アップデート:
メソッド createCalculation は次のとおりです。
注: MyLocation は、MyMessage を拡張するケース クラスです。
// Req は次のクラスです: net.liftweb.http.Req
コンパイラは次のように文句を言います。
これは fromJsonVal のメソッド定義です
JValue は net.liftweb/json からのもので、次のとおりです。 封印された抽象クラス JValue() は、java.lang.Object を net.liftweb.json.Diff.Diffable { <> } で拡張します。
更新: コンパイラは、エラーがこのコード行にあると報告しています
このコンパイル エラーをどのように修正すればよいと思いますか?
scala - PartialFunction.applyOrElse の使用方法
スロー可能なものを結果または失敗した未来に変換するために呼び出されたPartialFuncton[Throwable,Future[Result]]
errorMapがあります。lift
私は次のようにそれを行うことができますgetOrElse
:
で同じことが達成できるはずだとapplyOrElse
思いますが、この目的を達成するためにそれを呼び出す方法がわかりません。私は何applyOrElse
のためにあるのか誤解していますか?
scala - コレクション型パラメーターにバインドされたコンテキストからの暗黙的
Stream
私は、spray.json を使用してケース クラスを json 表現に変換することにより、応答をストリーミングするコードをいくつか持っています。これは、単一のケース クラスでは問題なく機能しますが、一般化したいと考えています。
だから私はこのようなケースクラスから始めています:
私のレポートストリーミングメソッドには、次のようなコードがあります(非常に単純化されています):
私がやりたいことはReport
、アイテム以上をサポートするために一般化することです:
しかし、もちろん、streamReport
メソッドはJsonWriter
type のスコープ内にa を見つけることができませんAny
。
にコンテキストがバインドされた型パラメーターを追加し、直接streamReport
渡すと、必要に近いことができます。Report
ただし、これを で動作させる方法がわかりませんPartialFunction
。以下はコンパイルされません (また、部分関数のシグネチャが上記とは異なるため、正確には適合しません):
どこが間違っているのかわかりません。型の消去、またはTry[Any]
部分関数のパラメーター型としての問題に関係していますか? ストリームの要素タイプに必要な暗黙的な JsonWriter を取得するにはどうすればよいですか?
scala - 複数の部分関数の結果を単一の値で収集しますか?
ドメインが重複している可能性のある部分関数がいくつかあるとします。
それらを値に適用し、その値で定義されている結果を収集したいと考えています。これを使用するエレガントな方法があると思いcollect
ましたが、私ができる最善の方法は
これはきれいに見えません。ビルトイン ケース メカニズムを使用して定義性をテストし、同時に評価する方法はありますか?
scala - PartialFunction を scala クラス コンストラクターに入れることはできません
PartialFunction
クラス コンストラクターでリテラルを使用できないという制限があるようです。
私の最初の質問は、なぜ部分関数リテラルが「this」にアクセスする必要があるのかということです。私の 2 番目の質問/観察は、Scala REPL で同じコードを再度実行すると REPL がクラッシュするということです。
最後に、この問題に対する適切な回避策はありますか?
scala - 関数を部分関数 scala に変換する
私は封印された特性を持っています:
また、すべてのメッセージを処理し、完全でない一致について警告する機能もあります。
アクターには PartialFunction[Any, Unit] が必要です。PartialFunction は Function を拡張します。つまり、自分の Function を PartialFunction に割り当てることはできません。
私は簡単なコンバーターを書きました:
しかし、これを行うためのより良い方法はありますか? または、標準のscalaライブラリに同等のものはありますか?
scala - () で PartialFunction を適用する Scala は、.apply() と同じではありません
このアイデアを思いついたときに、プロジェクト (Play Framework 2.4) で自分のスカラ コードをリファクタリングしようとしています。
(最小限の作業例を提供するために、いくつかのクラスを変更しました。たとえば、Result と Future[Result] をそれぞれ Int と Option[Int] に変更しました)
上記のコードはコンパイルされます。
それから私は: fold[T] パラメーター化された型を Int と Option[Int] に制限する必要があるので、以下を追加しました:
しかし、次のように変更すると、このコードはもはやコンパイルされません:
(apply() への明示的な呼び出しを追加しました) に変更すると、コンパイルされますfold(authenticated)(unauthenticated)(request)
。fold(authenticated)(unauthenticated).apply(request)
なぜこうなった?クラスで () と .apply() を呼び出すのは同じはずですよね?
コンパイラは、CanBeAuthenticatedRequest の型ではなく、戻り値の型 (Int または Option[Int]) を PartialFunction に渡すように求めているようです。
scala - caseステートメントが使用されている場合、isDefinedAtメソッドはどのように機能しますか?
このscala の部分関数の説明では、次のように case ステートメントが使用されます。
次に、次のように述べています。
このコードは isDefinedAt メソッドを明示的に実装していませんが、前の除算関数の定義とまったく同じように機能します。
前の除算関数では、apply メソッドと isDefined メソッドを次のように明示的に定義しています。
ここでコンパイラがある種の魔法を行っていることがわかりますが、メカニズムの性質に興味があります: ケース (d != 0 の場合) のガードはバックグラウンドで isDefined の本体に抽出されますか? 独自のガードを持つ複数の case ステートメントはどうですか? 関数のドメインは case ステートメントで定義されているため、コンパイラが舞台裏で isDefined の実装を構築する方法に違いありません。
私は正しいですか?