問題タブ [scala-generics]
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ジェネリック - 型制約が使用されている場合、scalaがサブタイプではなくスーパータイプのインスタンスを返すのはなぜですか?
y を x に追加できるものに変換しようとしています。ここで、x はある種のシーケンスです。
次の解決策があります。
しかし、私の疑問は、元のものが機能しなかった理由です。:+
スーパークラスで定義された演算子(この場合)を適用すると、スーパークラスが返されるように見えますか?つまり、がU
返されるので、エラーが発生します。Vector
foo
Seq
required "U" but found "Seq[T]"
この動作が見られる理由を教えてもらえますか?
scala - mockito で scalatest を使用すると、scalatest が奇妙な例外をスローする
scalatest と mockito のヘルプが必要です。ジェネリックを使用した単純なメソッドのテストを書きたい:
私のテストクラス:
テストを実行すると、次の例外がスローされます。
では、メソッドのパラメーターが 3 つしかないのに、なぜ 4 つのマッチャーを要求するのでしょうか? ジェネリックのせい?
バージョン:
- スカラ 2.11.7
- スケーラテスト 2.2.4
- モキート 1.10.19
scala - いくつかの一般的な scala コレクションの関数を書く
ケースクラスを定義しました...
...これは、Akka アクター間のメッセージとして渡されます。レシーバーはA
、 を使用してタイプのdescriptor
コレクションをフィルタリングし、 を使用して結果のフィルタリングされたコレクションから 1 つの要素を選択しますselector
。
書かれているように、受信側のアクターのコレクションに type がある場合にのみ機能しimmutable.Seq[A]
ます。type の要素の一般的なコレクションで機能するように、上記を一般化したいと思いA
ます。これは可能ですか?
scala - Scala: 型消去が大文字と小文字の境界を不利に拡大する
アップデート
この質問はAny
、A
in に置き換えることに関するものstep(x.flatMap((a: Any) => f(a).flatMap(g)))
です。パターン マッチングでの型消去は、これを困難にしているようです。
Free モナドは質問の核心とは無関係であるというコメントのポイントに感謝します。必要な私の例には、ジェネリック型A
とジェネリック型F[_]
(より高い種類の型?) が含まれます。
それは衒学的な質問であり、「型消去を回避する方法」( Scala で型消去を回避するにはどうすればよいですか? または、コレクションの型パラメーターを取得できないのはなぜですか? ) を知りたいと思っています。コードがコンパイルされます。これに TypeTags を自分で適用する方法がわかりませんでした。
静的型チェックについての言及は役に立ちます。が動的型チェックではなく静的型チェックによってAny
設定される理由を誰かが説明してくれますか? A
ここでは、型の消去によって静的な型チェックが不可能になり、コンパイラは動的な型チェックに戻っAny
てA
. ありがとうございました
私は3つのケースクラスを持っています。
trait から継承するものFree
:
step
、および上記のクラスは、トランポリンを実装するための「Scala での関数型プログラミング」の第 13 章の演習の一部です。
型消去は 内の型注釈を思いとどまらせるためcase FlatMap(FlatMap(x, f), g)
、このケース内のジェネリック型は未指定のままであり、Any
具象化されたときになります。次に、に与えられた無名関数の必要な署名は にx.flatMap
なりAny=>Free[F,A]
ます。この関数に必要な署名はA=>Free[F,A]
、実行時の真の署名です。
flatMap
asに与えられた無名関数の入力型に注釈を付けると、A
コンパイルが失敗します。
これはA
のサブセットにすぎないためだと理解していAny
ます:
型消去により、次のように絞り込むことができなくAny
なります。A
このようにステートメントに注釈を付けることcase
は、ドキュメント化以外の目的を果たさず、問題を引き起こすことさえあります。
この状況に TypeTags を適用する方法がわかりません。
このステートメントにどのように注釈を付けcase
てノックダウンAny
できA
ますか? ありがとう!!
scala - 型メンバーへのリフレクション?
私はこれが可能であることを知っています:
A
しかし、今は抽象型にしたい:
機能を実装するにはどうすればよいisDouble
ですか?