【发布时间】:2017-05-16 21:39:14
【问题描述】:
我编写了一个简单的隐式函数:mkString() 的一个版本,它的工作方式相同,但如果在任何要连接的参数中找到分隔符,则会引发错误。我想让它适用于所有类似序列的东西,所以我声明如下:
object SafeMkString {
implicit class SafeMkStringHelper[T](values: TraversableOnce[T]) {
def safeMkString(sep: String) = {
values.map { v =>
val asStr = v.toString
if (asStr.contains(sep))
throw new IllegalArgumentException("Value %s in %s contains separator %s" format
(asStr, values, sep))
else
asStr
}.mkString(sep)
}
}
}
这对大多数对象都适用,但在 Scala 2.10 中使用 Array[String] 类型的东西失败了。这是因为 Scala 中的数组只是 Java 数组的别名,并不继承自 TraversableOnce。但是,从Array 到WrappedArray 的隐式转换确实 继承自TraversableOnce。 Scala 中是否有一些规则不允许从 A -> B 然后从 B -> C 进行隐式转换?除了手动创建另一个从Array[T] 显式应用safeMkString 的隐式类之外,还有什么方法可以让这个工作?
【问题讨论】:
标签: arrays scala implicit-conversion implicit