我有一段Scala代码,我想使其更加通用。我知道那是Numeric[T]存在的,但是我不确定如何使用它。
def sumMaps[A](m1: Map[A, Long], m2: Map[A, Long]): Map[A, Long] = {
m1 ++ m2.map { case (k, v) => k -> (v + m1.getOrElse(k, 0L)) }
}
def sumMaps[A](m1: Map[A, Int], m2: Map[A, Int]): Map[A, Int] = {
m1 ++ m2.map { case (k, v) => k -> (v + m1.getOrElse(k, 0)) }
}
def sumMaps[A](m1: Map[A, Double], m2: Map[A, Double]): Map[A, Double] = {
m1 ++ m2.map { case (k, v) => k -> (v + …Run Code Online (Sandbox Code Playgroud) 我想编写一个通用类,该通用类包含一个范围的端点,但是通用版本会引发编译错误: value >= is not a member of type parameter A
final case class MinMax[A <: Comparable[A]](min: A, max: A) {
def contains[B <: Comparable[A]](v: B): Boolean = {
(min <= v) && (max >= v)
}
}
Run Code Online (Sandbox Code Playgroud)
具体版本按预期工作:
final case class MinMax(min: Int, max: Int) {
def contains(v: Int): Boolean = {
(min <= v) && (max >= v)
}
}
MinMax(1, 3).contains(2) // true
MinMax(1, 3).contains(5) // false
Run Code Online (Sandbox Code Playgroud) 我在 Scala 2.11 应用程序中有一个案例类,它有一个依赖于案例类的字段名称的方法,如下所示:
final case class Foo(
val a: String,
val b: String,
val c: String
) {
def partitionColumns: Seq[String] = Seq("b", "c")
}
Run Code Online (Sandbox Code Playgroud)
如果其中一个partitionColumns不作为案例类中的字段存在,我想要一个编译时检查来抛出一个错误,例如一些会捕捉到这个的东西:
final case class Bar(
val a: String,
val b: String,
val c: String
) {
def partitionColumns: Seq[String] = Seq("x", "y")
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经将分区行为封装在一个 trait 中,这减少了可能出错的次数/位置:
final case class Bar(
val a: String,
val b: String,
val c: String
) {
def partitionColumns: Seq[String] = Seq("x", "y")
}
Run Code Online (Sandbox Code Playgroud)
但是如果 trait 写错了,就没有检查,例如这段代码,它编译得很好:
sealed …Run Code Online (Sandbox Code Playgroud) 如果我想一次对多个列进行is-in测试,我可以这样做:
>>> from pandas import DataFrame
>>> df = DataFrame({'A': [1, 2, 3], 'B': [1, 4, 7], 'C' : [10, 12, 18]})
>>> mask = df[['A','B']].isin({'A': [1, 3], 'B': [4, 7, 12]}).all(axis=1)
>>> df = df[mask]
Run Code Online (Sandbox Code Playgroud)
这有效 - 是否有更简洁的解决方案?
scala ×3
generics ×2
typeclass ×2
apache-spark ×1
case-class ×1
pandas ×1
python ×1
scala-2.11 ×1
zero ×1