問題タブ [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 で部分的に実装された部分関数を拡張する
ここでは Akka アクター ライブラリを使用しています。アクター ライブラリは、"actor" を拡張するアクターがさまざまなメッセージを処理するために実装する必要がある部分関数 "receive" を定義します。特性 "clockActor" が Actor を拡張し、"MasterClock" と "SubClock" が "clockActor" を拡張するアプリケーションの特性階層を作成しています。「クロック」トレイトの受信機能にクロックの共通機能を追加しようとしていますが、マスターおよびサブクロックトレイトの受信機能に追加機能を追加するにはどうすればよいですか?
つまり、部分関数に余分な case ステートメントを追加する方法が必要です。アイデア?
scala - scala の部分関数が不明な型の値に対して定義されているかどうかを確認する
私は次の特性を持っています (ランク 2 ポリモーフィズムクリックのようなものを取得するには)
そして、部分関数をこの特性に変換する関数:
だから私の問題は isDefinedAt メソッドです。実行時に A が B のインスタンスであるかどうかを確認する必要があります。a.isInstanceOf[B] は型消去のため機能しません。
TypeTag/ClassTag を使用しようとしましたが、B には問題なく動作しますが、A のタイプは常に Any ではありません。
では、A が B のインスタンスであるかどうかを確認するにはどうすればよいでしょうか。
更新:私はこのコードでそれを使用します:
~> を直接使用すると、typeTag[A].tpe <:< typeTag[B].tpe ですべて正常に動作します。
しかし、この map 関数で使用すると、typeTag[A].tpe は常に Any になります。
scala - パターン マッチング ガードで明示的な .isDefinedAt() 呼び出しを回避する方法
複数の種類のアクターが同じテンプレートに基づいている Akka ベースのアクター システムがあります。これは、これらのアクターが応答値のタイプによってのみ異なるという事実によるものです。例えば:
部分関数には型消去を回避する方法があり、単純化できません
同時にif dataFunction.isDefinedAt(data)
、パターンにガードを付けることを強いられますが、私はそれがあまり好きではありません。
明示的な保護を回避する手段はありますか?
私が今のところ見つけた唯一の方法は、愚かなエクストラクタを導入することです:
しかし、標準ライブラリのどこかですでに行われているのでしょうか? または、コレクションメソッドに似た他の方法があるかもしれませんcollect
が、マッチングのためですか?
結論
いくつかの考えの後、extractor オブジェクトに戻り、@ pagoda_5b の提案の助けを借りてそれを特性に移動しました。
scala - 部分関数を使用した scala メソッドの実装
次のようなクラスがあります。
greet
メソッドの部分的な適用を使用して実装できるかどうか興味がありhello
ますか? 何かのようなもの:
(明らかにこれはうまくいきません)
scala - Scala の Magic PartialFunction
このコードはうまくいくとは思いませんが、うまくいきます (Scala 2.10 では):
それはどのように機能しますか?MatchError
a が の中にスローされることを期待していますres0
。
res0
Scala 言語仕様は、どのように解釈されるべきかを明示的に文書化していないようです。
scala - この PartialFunction が定義されているのに、Scala での適用後に (正しく) クラッシュするのはなぜですか?
ディープ パターン マッチングのユース ケースで部分関数を試してみたいと思います。これは、最初は (もちろん) Some(Some(3)) を適用した後は機能しませんでしたが、代わりに定義されているように見えました:
入れ子になったパターン マッチングを分離することで、物事はより簡単になると思いました。
しかし、結果は次のとおりでした。
適用後:
私は何か間違ったことをしていますか?順番に deepTestLvl{1,2} を合成したときに isDefinedAt を 2 回呼び出して正解を出すべきではありませんか?
scala - How exactly "case" works in partial functions in Scala?
I am just starting my seemingly steep learning curve with Scala and can't quite grasp how "case" works in partial functions exactly.
I looked at the definition of PartialFunction itself, and there I see a sample like the following:
The part where I am getting stuck is case x if x%2 -- how does Scala know what's what here? What is a formal definition of this "case" statement/keyword?
I think one reason for my confusion is because in Lift I see things like the following(in Actor classes):
I sort of understand intuitively what's going on here, but I can't assemble some kind of unified definition of how "case" should be used. Even more puzzling to me is how Scala compiler untangles all that.