【发布时间】:2020-10-03 11:21:37
【问题描述】:
假设我有一些函数应该采用 Ints 序列或 Strings 序列。
我的尝试:
object Example extends App {
import scala.util.Random
val rand: Random.type = scala.util.Random
// raw data
val x = Seq(1, 2, 3, 4, 5).map(e => e + rand.nextDouble())
val y = Seq("chc", "asas")
def f1[T <: AnyVal](seq: Seq[T]) = {
println(seq(0))
}
// this works fine as expected
f1(x)
// how can i combine
f1(y)
}
如何添加它以使其也适用于字符串?
如果我将方法签名更改为:
def f1[T <: AnyVal:String](seq: Seq[T])
但这行不通。
有没有办法优雅地对类型施加我所需的约束?
【问题讨论】:
-
如果它们是 2 种不同的类型,那么您可能应该为它们编写 2 个不同的函数。除了加号运算符之外,我看不到任何
Int和String共享的属性,这对它们来说并不完全相同 -
你想要一个typeclass
-
谢谢 - 这个函数本质上只是将这两个序列通过管道传输到一个 API 中。 API 只能接受 AnyVal 或 String。用户只需将数组中的数据传递给相同的函数端点。
-
谢谢@LuisMiguelMejíaSuárez,这看起来很有趣,会读一读!不知道这个概念。
-
谢谢@MarioGalic,我不知道 - 我会确保以后不会在问题中添加标签。
标签: scala generics types type-conversion context-bound