私は単純な暗黙の関数を書いています:mkString()のバージョンは同じですが、結合されている引数のいずれかに区切りが見つかるとエラーを投げます。私はそれがすべてのシーケンスのような物事を動作させるためにしたいので、次のように私はそれを宣言した:Scala 2.10 TraversableOnce上の暗黙の関数は配列を受け入れるべきですが、
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)
}
}
}
これは、ほとんどのオブジェクトのために正常に動作しますが、タイプArray[String]
の何かをScalaの2.10に失敗します。これは、Scalaの配列は単純にJava配列のエイリアスであり、TraversableOnce
から継承しないためです。ただし、Array
からWrappedArray
への暗黙的な変換は、がを継承します。TraversableOnce
を継承しています。 Scalaでは、A→BからB→Cへの暗黙的な変換を禁止する規則がいくつかありますか?明示的に適用する別の暗黙的なクラスを手作業で作成する以外に、Array[T]
からsafeMkString
を取得する方法がありますか?あなたの第一の質問への答えで
Doh、本当にRTFMのケースです。 –