問題タブ [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 に答える
883 参照

scala - Scala で配列をその場でソートする

私はこれを試しました:

しかし、私はコンパイラのバグにぶつかっていると思います:

どうすればこれを回避できますか?

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

scala - Option defers ClassCastExceptionでジェネリックメソッド呼び出しをラップするのはなぜですか?

次のような配列があるとしましょう*:

明らかな理由で失敗します:

次に、次のクラスを考えてみましょう。

私が知る限りgetAs、前の のapply後にasInstanceOf.

驚くべきことに、そうではありません。単独で呼び出すと、例外がスローされます。

しかし、ラップされた場合はOption成功します:

ラップされた値にアクセスしようとした場合にのみ失敗します:

それで、ここで何が起こりますか?制限されているように見えるClassCastExceptionので、型消去のような醜いものに関連していると思います。


*サード パーティのコードの動作を模倣するためAnyasInstanceOf存在するので、それについて詳しく説明しないでください。

** Scala 2.10.5、2.11.7 でテスト済み

*** コンテキストに興味がある場合は、Using contains in scala - exception を参照してください。

**** コメントにリンクされているその他の関連する質問:

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

scala - Scala コレクションの一般的な拡張

私は持っていSeq[(A, B)]ます。.toMultiMapそのようなコレクションに暗黙的なメソッドを追加して、 を取得できるようにしたかったのMap[A, Seq[B]]です。

これは私の最初の試みでした:

しかし、今の問題はTraversable、値に対して常に a が返されることです。Map[A, Set[B]]もしそうなら、私は元に戻したいですSet[(A, B)].toMultiMap

それで、私は次のようなことを試しました:

しかし、それは機能しません:

これを行う方法は何ですか?

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

scala - Scala-共分散

共分散の定義によると:

Q[+B] は、Q が任意のクラスを取ることができることを意味しますが、A が B のサブクラスである場合、Q[A] は Q[B] のサブクラスと見なされます。

次の例を見てみましょう。

List1[SomeB]すべて問題ありませんが、なぜのサブクラスなList1[SomeA]のか、つまりなぜ b が のサブクラスなのaかわかりません。

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

scala - scala のジェネリック抽象型のパターン マッチング

私は自己再帰型を持っています:

今、私はでパターンマッチしたいですP#Solution。内にいると仮定しましょうcase class Foo[P <: Problem[P]]():

もちろん、型消去のために失敗します。そのコードをscalaでコンパイルする方法はありますか?

class/type タグを見たことがありますが、そのような場合に使用できるかどうかはよくわかりません。

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

scala - Scala ケース クラスのみを受け入れるジェネリック クラスを定義する

Scala でジェネリック クラスを定義するとき、型パラメーター 'A' がケース クラスでなければならないことを確認するにはどうすればよいですか?

環境:

ケースクラスのコレクションであるかのように、reactivemongo JSONCollection と対話する汎用の 'TypedCollection' ラッパー クラスを定義しようとしています (リレーショナル データベースの Typesafe Slick に似ています)。

「A」がケース クラスでなければならない理由は、自動的に「unapply」メソッドが与えられるためです。このメソッドは、「A」型から JsObject または BSONObject への暗黙的な変換を作成するときにジェネリック クラスで使用されるため、MongoDB に格納できます。すなわち

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

scala - scala で型情報を渡す

このように定義されたクラス階層がある場合

sealed trait A case class B() extends A case class C() extends A // and so on ..

そして別の場所で、上記のクラスを型としてその関数に動的に渡すメソッドを呼び出したい

(例: method[B](..){..} or method[C](..){..})

実行時にこれをどのように達成できますか?

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

java - Spark カスタム Hadoop 入力形式 Java ジェネリック エラー

mapreduce 時代の既存のカスタム入力形式を再利用するために Spark を評価しようとしているときに、Java ジェネリックの問題に遭遇しました。

上記により、myRdd で次のエラーが発生します

何が起こっているのかわからない。私は境界を満たしているように思えますか?私は問題を見つけることができませんか?

これは、呼び出されている scala コードです。