問題タブ [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 カリー化: 部分関数による空の引数を持つ関数のオーバーライド
部分関数を使用して、空の入力引数を持つ関数を実装/オーバーライドしようとしています。これは、この機能しない最小限の例で最もよく説明されています。
object creation impossible, since method build in trait TFactory of type ()T is not defined
ビルドのタイプが であるため、これは理にかなっています(Int)()T
。私の次のアイデアはbuild
、空の引数を取り、 a を返す関数に型を明示的に作成することでしたT
。
の型が であることは明らかbuild
です() => T
。驚いたことに、コンパイラは不平を言うようになりましobject creation impossible, since method build in trait TFactory of type => () => T is not defined
た (型が突然 a で始まることに注意してください=>
)。関数定義の最後に必死に空の括弧を追加しても役に立ちません。
これらの型が実際には同じであることをコンパイラに納得させるにはどうすればよいですか?
説明:
私の主な目標はT
、ファクトリのファクトリを必要とせずに、パラメータのない初期化を実現することです。例:
結論:
抽象関数は、関数が取る必要がある引数ブロックの数を単純に決定するため、不可能だと思いますbuild
。言い換えれば、関数によって抽象関数を実装することはできません。その部分適用は、実装しようとしている関数と同じ署名をたまたま持っています。
scala - Scala での andThen を使用した PartialFunctions の連鎖
Daily scala の例を再利用しましょう:
そして追加しましょう:
andThen はここで期待どおりに動作します。
true
iffを返しますx == 1
(実際にpf2
は、PartialFunction である必要はまったくありません)
ただし、次のことを期待していました。
すべてに対して返さfalse
れますx
(つまり、pf1 が定義されている場合、pf3 をチェックします) が、pf1 を検証せず、検証するだけです。
最終的には、pf1 andThen pf3 lift(x)
常に MatchError になります。None を取得したいのですが… in などの各関数を持ち上げることでこの動作を取得できますが、pf1.lift(x).flatMap(pf3.lift)
純粋な PartialFunction API を使用するより簡単な方法はありますか? (そして、各部分関数を個別に持ち上げずに?)
scala - PartialFunction を拡張するオブジェクトを定義し、ケースで直接実装する
私は Scala にまったく慣れていませんが、すでに気に入っています。部分関数に関するチュートリアルと記事を読みました。私が達成したいのは、PartialFunction[...,...] を拡張するオブジェクトを持ち、isDefinedAt を定義してメソッドを適用する必要なく、ケースで直接定義することです。
例えば
部分関数の有効な定義です。でもなんで書けないの
? これにより、 isDefinedAt と apply を定義する必要がなくなり、特定の (私が使用しているライブラリによって事前定義された) 型のクラスの記述が容易になります。
scala - scala Map を部分関数に変換するにはどうすればよいですか
現在、次のコード スニペットを使用しています。
Maps は当然、部分関数を定義する必要があるように思えます。Scalaには、マップを部分関数に変換する標準/より簡潔で明示的な方法がありますか? 多分ある種の暗黙の変換?
scala - map、flatmap、... 部分関数でのタプルの使用
私が行った場合:
大丈夫です。
私が行った場合:
それも大丈夫です。
しかし、もしそうなら:
効果がないでしょう。
名前付きタプルを使用するために「case」キーワードを使用する必要があるのはなぜですか?
scala - ケースバイタイプはscalaでどのように機能しますか?
ケース クラス、パターン マッチング、unapply、PartialFunction については知っていますが、以下のマクロ スニペットについては混乱しています。
MemberScope の Scaladoc http://www.scala-lang.org/api/2.10.4/#scala.reflect.api.Scopes $MemberScope
Collect メソッドは、メソッドがPartialFunction[Universe.Symbol, B]
見つからないことを受け入れます。また、それはケース クラスではなくトレイトであるため、ウィッチ コード コンパイラでは変換が行われます。unapply
MethodSymbol
scala - Scala で型パラメーターを使用してケース クラスを部分的に適用する方法
そこで、Scala のケース クラスのパラメーターとして渡したいタプルがあります。型パラメーターのないケース クラスの場合、これは簡単です。
ただし、ケース クラスに型パラメーターがある場合は、機能しないようです。
型パラメーターを使用してケース クラスを部分的に適用するにはどうすればよいですか? Scala 2.10.3 を使用しています。
scala - Scala: PartialFunction の関数定義が曖昧
PartialFunction の関数定義は次のとおりです。
PartialFunction を使用すると、コレクションcase
で withを使用してフィルタリングできます。collect
たとえば、コレクション内の値が偶数の場合に String に変換される整数のリストと PartialFunction isEven[Int, String] がある場合。そのため、定義に戻り値の型を持つ新しいコレクションが返さ+B
れます。
私の質問は、なぜcontravariant -A
ですかcovariance +B
?基本的に、任意の入力から任意の出力を受け入れる機能があります。入力が任意の型または型 A のスーパー型であり、戻り値の型が B またはそのサブクラスであることを示す必要があるのはなぜですか? ただ言うことはできません: