問題タブ [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 - 具体的なものからのScalaPartialFunctions
として具体的な関数(たとえば、タイプ(A) => B
)として使用する簡単な方法はありますPartialFunction[A, B]
か?私が知っている最も簡潔な構文は次のとおりです。
次のような暗黙の変換がどこかにありますか?
探していたものを書いたばかりだと思いますが、これはすでにScalaライブラリに存在しますか?
scala - 部分関数パターンマッチは、クラスと特性に分割されます
Liftは、Comet Actorsの実装にPartialFunctionを使用しており、通常、クラスでは次のようになります。
私がやりたいことは、最後のケースを特性に移すことができるように、その部分関数を分割することさえ可能かどうかはわかりません。
したがって、新しいコメット俳優がいるときは、次のようにします。
そしてどういうわけか、特性MyActorTraitには欠落があります
scala - Scalaの空の部分関数
{ case ... => ... }
部分関数の構文には少なくとも1つ必要なようですcase
。
では、「空の」部分関数を定義する最良の方法は何でしょうか。「手動で」オーバーライドするよりも良い方法はありますisDefinedAt
かapply
?
scala - より簡潔なスカラ関数を定義する方法
私は akka ライブラリを使用しており、ホット スワップを介して実行時にアクターによって実装される部分関数を提供しています。
akka ホット スワップは、PartialFunction[Any, Unit] の形式で引数を取ります。私は次のように定義しました:
したがって、この関数を使用するには、新しい Fake1Reader().read を提供する必要があります。
関数または PartialFunction の適用または拡張を使用して、このクラスを行うより簡潔な方法はありますか?
scala - 部分的なケースから主な値を抽出する
一致するいくつかのケースを定義しているとしましょう。ここでは、引数の検証のみに関心があります。
関数のシグネチャは次のとおりです。
CallProperty
一致したオブジェクト全体を返すにはどうすればよいですか? 新しいものを作成できますが、それは少し醜いです。の代わりにオリジナルを参照する方法はありxxx
ますか?
scala - Scala: Option と PartialFunction を返す関数の選択
私は比較的 Scala の初心者であり、Option を返す関数または PartialFunction のいずれかを使用して実行できるように思われる実装を進める方法についてアドバイスをお願いします。関連するすべての投稿を見つけましたが (質問の下部を参照)、これらには PartialFunction の使用または一方から他方への変換の技術的な詳細が含まれているようです。「状況がX、Y、Zの場合、Aを使用するか、Bを使用しますが、Cも検討してください」というタイプの回答を探しています。
私の使用例は、パス ファインダーのライブラリを使用した場所間のパス検索です。場所のタイプがL
で、パスのタイプがP
で、目的のパス検索結果がIterable[P]
. パッチの検索結果は、すべてのパス ファインダー (Google マップのようなものでは、自転車、車、徒歩、地下鉄など) にパスの提案を求めることによって組み立てる必要があります。終了位置のペア。
これについては、次の 2 つの方法があるようです。
(a) パス ファインダーを次のように定義し、f: (L,L) => Option[P]
次のような方法で結果を取得します。finders.map( _.apply(l1,l2) ).filter( _.isDefined ).map( _.get )
(b) パス ファインダーをf: PartialFunction[(L,L),P] and then get the result via something like
finders.filter( _.isDefined( (l1,l2) ) ).map( _.apply( (l1,l2)) )`として定義します。
返される関数を使用すると結果の二重評価が回避されるように思われるOption[P]
ため、結果をキャッシュしない限り、高価な計算の場合はこれが望ましい場合があります。また、単一の引数を期待しているのOption
に対し、任意の入力署名を持つことができるように見えます。PartialFunction
しかし、Scala ライブラリとのやり取りなど、直接的ではなく、より「全体像」に関する考慮事項について、実務経験のある人からの意見を聞くことに特に興味があります。を使用するPartialFunction
と、コレクション API の特定のメソッドを利用できるようになり、他の方法で成果が得られる可能性がありますか? そのようなコードは一般的により簡潔になりますか?
関連するが異なる質問:
scala - Scala PartialFunction はモノイドにできますか?
PartialFunctionはMonoidにできると思いました。私の思考プロセスは正しいですか?例えば、
ただし、現在のバージョンの Scalaz(6.0.4) には含まれていません。含まれていない理由はありますか?
java - JavaでScala PartialFunctionを実装する最も簡単な方法は何ですか?
相互運用性のために、Java コードから Scala PartialFunction を渡す必要があります。関数 (Function1 など) には、匿名型でサブクラス化できる AbstractFunction がありますが、PartialFunction で同じことを行う最も簡単な方法は何でしょうか?
この場合、Java の「完全な」関数であり、すべての値に対して定義されているように見えますが、PartialFunction として型付けされていれば幸いです。
scala - Scala: 型パラメーターがメンバー型の場合、コレクションの型パラメーターを「収集」後も存続させる
通常、特定の型に一致するシーケンスのすべての要素を収集すると、結果のコレクションには、元のコレクションの型と選択された型の両方が含まれます。
これは、入力型がバインドされたメンバー型によってパラメーター化され、戻りたいのはバインドされた型 (メンバー型ではない) によってパラメーター化されたシーケンスのみである場合でも機能します。
ただし、メンバー型によってパラメーター化されたシーケンスを実際に戻したい場合、これは失敗します。
エラーメッセージ:
機能を回復するために、collect
呼び出しにメンバー型を含めることができますが、署名のためにすべての要素がその型に一致する必要があることを考えると、それは冗長に思えます。
collect
メンバー型のシーケンスを定義して、編集時にメンバー型を記憶する方法はありますか?
scala - resetLocalAttrs 使用時の奇妙なエラー
(マクロ) コンテキストの resetLocalAttrs メソッドを使用するマクロをコーディングしました。マクロが展開された後、奇妙なエラーが発生し、何が起こっているのかわかりません。まず、問題を紹介します。state (単純な Int として表します) とactionの 2 つのプリミティブがあります。状態はシステムの現在の状態を表し、アクションは状態の変更を担当します。アクションは、アトミックにすることも、アトミック アクションで構成することもできます。
コードでわかるように、AndNextは部分関数を受け取ります。これは、その瞬間の現在の状態に応じて、1 つまたは別のアクションを起動できるためです。構成されたアクション内にあるアトミック アクションは、シーケンス内の先行するアトミック アクションによって残された先行状態を必要とする可能性があるため、Int => Actionで保護する必要があります。
ダミー関数を使用してテストにInt => Actionパラメーターを強制的に要求させて、コードをテストしてみましょう。
大丈夫ですが、私は DSL に取り組んでおり、冗長な暗黙の状態をすべて記述するには冗長すぎます。このコードを DSL の使用に適したものにするために、それらを非表示にする必要があります。次のかわいい呼び出しに到達しようとしています...
アクションを保護されたアクションに変換するマクロを実装しました (Int => Action を思い出してください)。
(*)ビュー内のメソッドを変換するマクロ宣言の暗黙に注意してください。
前者 (およびコメント付き) の reify は問題なく動作しますが、いくつかの制限があるため、resetLocalAttrs() を呼び出す reifyを使用する必要があります (知りたくない場合は、この質問が長すぎます :)。この具体化は奇妙なエラーで失敗します:
どこで Any をインスタンス化しようとしていますか? リセットが AST に大きな影響を与えるのはなぜですか? 私はそれを何度も使用しましたが、タイプとシンボルをうまくリセットしていました。
問題を見つけるためのより良いアプローチは何ですか? 私は showRaw を使用してtypeとidsフラグを有効にしてきましたが、かなり難しくなっています。