問題タブ [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でパラメータをエクストラクタ(適用解除)に暗黙的な変換を使用することは可能ですか?
文字列をラップする CaseInsensitive というクラスを作成しました (「Scala で大文字と小文字を区別しない比較を行う文字列クラスの実装」を参照)。
CaseInsensitive 型のメンバー変数を持つケース クラスを作成したので、CaseInsensitive 型の変数を抽出するデフォルトの unapply メソッドを取得しますが、次のように使用することを望んでいました。
このコードはコンパイルに失敗します: (コンストラクター行ではなく、抽出行で)
しかし、String から CaseInsensitive への暗黙的な変換により、より詳細なコードを入力する必要がなくなり、これをコンパイルできると思いました。
CaseInsensitive の実装は次のとおりです。
scala - case ステートメントの本文 (またはエクストラクタが使用される他の場所) のパラメータを使用して、エクストラクタをカスタマイズできますか?
基本的に、使用する前に変数に格納することなく、カスタム エクストラクタを構築できるようにしたいと考えています。
これは私がどのように使用するかの実際の例ではありません。正規表現または構造のような他の文字列パターンの場合に使用される可能性が高くなりますが、うまくいけば、私が探しているものを説明できます:
1 つのカスタム エクストラクタを実行するだけでは大きな違いはありませんが、case ステートメント用に大量のエクストラクタのリストを作成する場合は、すべてのエクストラクタをその使用法から分離することで、読みにくくなる可能性があります。
答えはノーだと思いますが、これはできませんが、最初に聞いてみようと思いました:D
class - 複数の引数リストを持つクラスをパターンマッチングする方法は?
このクラスを検討してください。
unapply
次のようなものと照合したい場合、メソッドはどのようになりますか?
私はこれを試しました:
しかし、それは実際には機能しませんでした。
scala - Scala - 可変引数を返すことを適用解除できますか?
以下のオブジェクトL1
が動作します。varargs を渡すことでan を「作成」できますが、これは良いことですが、同じ構文を使用しL1
て an に代入できるようにしたいと考えています。L1
残念ながら、ここで行った方法ではArray
、L1
.
L2
以下のように、明白な方法のように思われる方法でこれを達成しようとしました。
しかし、これはエラーを与えます:
このように可変引数を使用することは可能unapply
ですか?
scala - Scala はこの種のエクストラクタを許可していますか?
このコレクションがあるとしましょう:
次のように機能するエクストラクタを定義する方法はありますか:
疑似コードで申し訳ありませんが、それを表現する方法がわかりません。最後の要素として 5 を持つものと一致させる方法はありますか? 最初の要素が 1 で最後の要素が 5 の何かに一致させたい場合はどうすればよいでしょうか? これは、さまざまな長さの配列で機能しますか (例では、配列に異なる長さを具体的に選択したことに注意してください)。
ありがとう!
scala - Scala-適用しない暗黙の変換
エクストラクタでパラメータを暗黙的に変換したいのですが、機能していないようです。この非常に単純なケースを考えてみましょう。
しかし、私はそれを期待どおりに使用することができません:
String
パラメータをからに変換できない理由を誰かが説明できますMyString
か?私はそれがその場で呼び出すことを期待しstring2mystring("a")
ます。明らかに私はこの問題を回避することができますval Apply(y) = MyString("a")
が、そうしなければならないようには思えません。
注:この質問はこれに似ていますが、1)なぜこれが起こっているのかについて、実際には良い答えがない、2)例は必要以上に複雑です。
scala - unapply と unapplySeq の違いは何ですか?
unapply
Scala にとの両方があるのはなぜunapplySeq
ですか? 2つの違いは何ですか?いつどちらを優先する必要がありますか?
scala - Scala:ケースクラスの適用解除と手動実装および型消去
私は、Scalaが型消去警告の影響を受けないようにするケースクラスで何をするのかを理解しようとしています。
次のような単純なクラス構造があるとします。それは基本的にEither
:
そして、あなたはそれをこのように使おうとしています:
すべてが問題なくコンパイルおよび実行されます。ただし、unapply
自分でメソッドを実装しようとすると、コンパイラーは警告をスローします。Main
上記と同じクラスで次のクラス構造を使用しました。
フラグを使用してコンパイルすると-unchecked
、次の警告が発行されます。
今、私は型消去を理解し、警告を回避しようとしましたManifests
(これまでのところ役に立たない)が、2つの実装の違いは何ですか?ケースクラスは、追加する必要があることを実行していますか?これは回避できますManifests
か?
-Xprint:typer
フラグをオンにした状態でscalaコンパイラーを介してcaseクラスの実装を実行しようとしましたが、unapply
メソッドは予想どおりに見えます。
scala - Scala - Int に unapply を追加
私はこれを行うことができるようにしたい:
しかしInt
、方法がありませんunapply
。
メソッドを既存のオブジェクトに暗黙的に追加する方法を説明するこの回答を見つけたので、試してみました。彼らが提供した解決策は機能しますが、残念ながらパターン マッチングには対応していません。ここに私が持っているものがあります:
これらのテスト ケースはすべて問題ありません。
しかし、私が望むものは失敗します:
暗黙の変換が機能し、 とのパターン マッチングがunapply
機能する場合、Scala はこれら 2 つのことを組み合わせて暗黙のパターン マッチングを行わないのはなぜでしょうか?
scala - unapply での Scala 一致エラー
http://www.scala-lang.org/node/112でコードを試していますが、何かをスローするように見えないものに対して一致エラーが発生します。
これは元のコードです:
奇数を渡すとどうなるかをテストするために、数行追加しました。
私が知る限り、21 または任意の奇数の場合も、オブジェクトの unapply メソッドで処理する必要があります。なぜそうではないのか、誰かが説明できますか?