問題タブ [unapply]
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
私は
次のようなリスト内包表記で使用したい:
しかし、エクストラクタが戻ったために「rader」の「rad」が失敗するとNone
、MatchError
.
理解のためのエクストラクタは、ケースを処理/無視することになっていませんNone
か、それとも何かを見逃していましたか?
私はそれをできた
しかし、それはそれほどセクシーではありません;)ありがとう
scala - Scala-Lift: オーバーロードされた定義へのあいまいな参照 - 子クラスの unapply メソッド
コンパイラは言う
コードは次のようになります (Scala + Lift)
AbstractJsonConversion は次のようになります
オーバーロードされた unapply メソッドを親クラス AbstractJsonConversion からコンパニオン オブジェクト UserDto に移動すると、すべて問題ありません。
私はここで何が間違っているのだろうか?親クラス AbstractJsonConversion でオーバーロードされたメソッド unapply と、その子コンパニオン オブジェクトで別のメソッドを使用できないのはなぜですか?
scala - Scalaエクストラクタを使用して文字列をIntにキャストする
エクストラクタString
を使用してキャストしようとしています。Int
私のコードは次のようになります。
ランタイムエラーが発生します:java.lang.String cannot be cast to java.lang.Integer
。エクストラクタはまったく使用されていないようです。私は何をすべきか?
編集:私のユースケースは次のとおりです。playを使用していて、URLで渡されたクエリ文字列を解析したいと思います。クエリ文字列値(String)を取得して、Int、Doubleなどとして使用したいと思います。たとえば、
scala - Scalaでのより種類の多いタイプの推論の制限は何ですか?
次の簡略化されたサンプルコードでは、次のようになります。
applicativeOneでapplicativeTwiceを呼び出すことができ、型推論が機能します。applicativeTwice(applicativeOne)で呼び出そうとすると、推論が失敗します。
Scala2.10.0のエラーは次のとおりです。
「?F」が(適切な種類の)何かと一致しないのはなぜですか?最終的には、applicativeTwiceを暗黙の関数にしたいのですが、最初に型推論を機能させる必要があります。私は同様の質問を見てきましたが、その答えは型推論アルゴリズムの限界を示していました。しかし、このケースはかなり限定的であり、モナド変換子ではかなり厄介なものに違いないので、これを回避するためのトリックが欠けているのではないかと思います。
scala - ポリモーフィック unapply でエクストラクタを使用するには?
私は本当にこの小さなことを取得しません。さまざまなタイプのいくつかのサブクラスを持つ抽象クラス Box があります。例えば
Box のコンパニオン オブジェクトの apply メソッドは単純です。
だから私は書くことができます
さて、 unapply と書くと、問題が発生します。私の最初のアイデアは、次のように型にパターン マッチングを使用することでした。
}
型の消去のために、これは単に機能しません。
2 番目の試みは、型 T と各サブクラスで再定義された抽象型メンバーを持つジェネリック Box[T] でした。例えば:
したがって、unapply を次のように書き直すことができます。
残念ながら、これもうまくいきません。したがって、Box[String] の明示的な型参照も消去されるので、代わりに型マニフェストを使用する必要があると思います。たぶん次のようなもの:
このコードはコンパイル (2.10) されますが、依然として目的の暗黙的な変換は行われません。なんで?
簡単な質問ですが、リフレクションやマニフェストを使用せずに値を抽出する方法はありますか?
ポリモーフィズムとパターン マッチングを組み合わせる簡単な方法があるかどうかという質問は、私を本当に困惑させます。そうでない場合、Scala で同様の効果を達成する他の方法はありますか?
アイデアや提案はありますか?
どうもありがとうございました。
scala - ブール値を返すscala unapply
これを読んでもunapply()
、返品についてまだ疑問がありますBoolean
。
Scala Programming Book (第 2 版) の 602 ページをご覧ください。例があります:
UpperCase は、return を持ち、持たないオブジェクトとして定義されてunapply()
いBoolean
ます。apply()
このようなものはどこTwice
にありますか:
質問は次のとおりです(多すぎるに違いありません、申し訳ありません):
ここで UpperCase().unapply(..) はどのように機能しますか?
を渡すDIDI@hotmail.com
と、x
最初のコード snippet = 'DI'.. で '@' .. を使用して 'x' をバインドし、それを に渡してie (?)UpperCase.unapply
を呼び出します。unapply(x)
unapply('DIDI')
True
しかし、なぜOption
ですか?unapply
私はそれが戻ると思う傾向がありますOption
..それがどのように機能するかのようなものです。これはおそらく、通常はOption
一部のデータをラップするためですが、単純なケースでは、ブール値をラップするべきではありませんか? そして、apply() がないからですか?
Boolean
/を使用する場合の違いは何Option
ですか? この例に基づいています。
そして、この構文: x @ UpperCase()
、特定の 1 つの内部で一致している場合、構文を置き換えることになっていvalue match case
ますか (そのように読むと思いますか? case
) これを行う統一された方法/構文とは思えません。
通常、次のような構文 (x,y が Int であると仮定):case AA(x @ myX, y) => println("myX: " + myX)
は、x
にバインドすることを示します。この場合myX
、基本的にmyX
は .. のエイリアスです。x
しかし、私たちの場合 - x @ UpperCase()
. .. にx
バインドし、パラメーターとして配置します。つまり、ここでのバインドは非常に抽象的/幅広い概念です..UpperCase().unapply()
x