問題タブ [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.

0 投票する
2 に答える
628 参照

scala - Scalaジェネリック - 型制約が使用されている場合、scalaがサブタイプではなくスーパータイプのインスタンスを返すのはなぜですか?

y を x に追加できるものに変換しようとしています。ここで、x はある種のシーケンスです。

次の解決策があります。

しかし、私の疑問は、元のものが機能しなかった理由です。:+スーパークラスで定義された演算子(この場合)を適用すると、スーパークラスが返されるように見えますか?つまり、がU返されるので、エラーが発生します。VectorfooSeqrequired "U" but found "Seq[T]"

この動作が見られる理由を教えてもらえますか?

0 投票する
1 に答える
387 参照

scala - mockito で scalatest を使用すると、scalatest が奇妙な例外をスローする

scalatest と mockito のヘルプが必要です。ジェネリックを使用した単純なメソッドのテストを書きたい:

私のテストクラス:

テストを実行すると、次の例外がスローされます。

では、メソッドのパラメーターが 3 つしかないのに、なぜ 4 つのマッチャーを要求するのでしょうか? ジェネリックのせい?

バージョン:

  • スカラ 2.11.7
  • スケーラテスト 2.2.4
  • モキート 1.10.19
0 投票する
1 に答える
159 参照

scala - いくつかの一般的な scala コレクションの関数を書く

ケースクラスを定義しました...

...これは、Akka アクター間のメッセージとして渡されます。レシーバーはA、 を使用してタイプのdescriptorコレクションをフィルタリングし、 を使用して結果のフィルタリングされたコレクションから 1 つの要素を選択しますselector

書かれているように、受信側のアクターのコレクションに type がある場合にのみ機能しimmutable.Seq[A]ます。type の要素の一般的なコレクションで機能するように、上記を一般化したいと思いAます。これは可能ですか?

0 投票する
0 に答える
137 参照

scala - Scala: 型消去が大文字と小文字の境界を不利に拡大する

アップデート

この質問はAnyAin に置き換えることに関するものstep(x.flatMap((a: Any) => f(a).flatMap(g)))です。パターン マッチングでの型消去は、これを困難にしているようです。

Free モナドは質問の核心とは無関係であるというコメントのポイントに感謝します。必要な私の例には、ジェネリック型Aとジェネリック型F[_](より高い種類の型?) が含まれます。

それは衒学的な質問であり、「型消去を回避する方法」( Scala で型消去を回避するにはどうすればよいですか? または、コレクションの型パラメーターを取得できないのはなぜですか? ) を知りたいと思っています。コードがコンパイルされます。これに TypeTags を自分で適用する方法がわかりませんでした。

静的型チェックについての言及は役に立ちます。が動的型チェックではなく静的型チェックによってAny設定される理由を誰かが説明してくれますか? Aここでは、型の消去によって静的な型チェックが不可能になり、コンパイラは動的な型チェックに戻っAnyA. ありがとうございました


私は3つのケースクラスを持っています。

trait から継承するものFree:

step、および上記のクラスは、トランポリンを実装するための「Scala での関数型プログラミング」の第 13 章の演習の一部です。

型消去は 内の型注釈を思いとどまらせるためcase FlatMap(FlatMap(x, f), g)、このケース内のジェネリック型は未指定のままであり、Any具象化されたときになります。次に、に与えられた無名関数の必要な署名は にx.flatMapなりAny=>Free[F,A]ます。この関数に必要な署名はA=>Free[F,A]、実行時の真の署名です。

flatMapasに与えられた無名関数の入力型に注釈を付けると、Aコンパイルが失敗します。

これはAのサブセットにすぎないためだと理解していAnyます:

型消去により、次のように絞り込むことができなくAnyなります。A

このようにステートメントに注釈を付けることcaseは、ドキュメント化以外の目的を果たさず、問題を引き起こすことさえあります。

この状況に TypeTags を適用する方法がわかりません。

このステートメントにどのように注釈を付けcaseてノックダウンAnyできAますか? ありがとう!!

0 投票する
1 に答える
46 参照

scala - 型メンバーへのリフレクション?

私はこれが可能であることを知っています:

Aしかし、今は抽象型にしたい:

機能を実装するにはどうすればよいisDoubleですか?