问题标签 [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在那里模仿第 3 方代码的行为,所以请不要纠缠于此。

** 在 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值。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 中编译?

我见过类/类型标签,但我不确定它们是否可以在这种情况下使用。

0 投票
1 回答
488 浏览

scala - Scala 定义一个只接受case类的泛型类

在 Scala 中定义泛型类时,如何确保类型参数“A”必须是案例类?

语境:

我正在尝试定义一个通用的“TypedCollection”包装类来交互响应式mongo JSONCollection,就好像它是一个案例类的集合(类似于关系数据库的Typesafe Slick)。

'A' 必须是一个案例类的原因是它会自动被赋予一个 'unapply' 方法。在创建类型“A”到 JsObject 或 BSONObject 的隐式转换时,在泛型类中使用此方法,以便可以将其存储在 MongoDB 中。IE

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 回答
266 浏览

scala - 为什么 Scala 在泛型函数类型参数推断中无法将 Null 类型识别为 T 的子类型?

我在scala中有以下函数定义:

这应该结合2个GenExtractors:

进入:

其中 C 是 A 和 B 的共同超类型

但是,当我尝试调用此函数时:

我收到以下错误:

这显然是一个误报,因为在这种情况下:

满足条件:Null <: R & R >: R

为什么scala编译器给了我这个错误?我应该怎么做才能修复它?

0 投票
1 回答
329 浏览

java - Spark自定义hadoop输入格式java泛型错误

在尝试评估 Spark 以重用我们现有的 mapreduce 时代的自定义输入格式时,我遇到了 Java 泛型问题。

以上导致 myRdd 出现以下错误

不知道发生了什么。在我看来,我确实满足了界限?我无法发现问题?

是正在调用的 scala 代码。

0 投票
1 回答
180 浏览

scala - 为什么在具有相同构造函数参数类型的案例类中scala可序列化性不同?

为什么我能够序列化这个:

...但不是这个

两者似乎都有相同的构造函数类型原型:

并且都扩展了 scala.Serializable 和 java.io.Serializable

它有一种实现 TypeAware 子类的方法:

  • 避免必须在每个子类中声明 tpe(就像 ClassWithType2 一样)?
  • 允许对象被序列化

这是测试工具