Only my two cents:
abstract class Printable{
def print: String
}
class PrintableArray[T <% Printable](a: Array[T]) extends Printable{
def print = (for(x <- a) yield x.print) mkString
}
implicit def printableArray[T <% Printable](a: Array[T]) = new PrintableArray(a)
class PrintableByte(b: Byte) extends Printable{
def print = "%
}
implicit def printableByte(b:Byte) = new PrintableByte(b)
class PrintableInt(i: Int) extends Printable{
def print = "%
}
implicit def printableInt(i: Int) = new PrintableInt(i)
And then:
scala> val b: Byte = -1
b: Byte = -1
scala> val i: Int = 100
i: Int = 100
scala> val bArr = Array[Byte](11,22,33,44)
bArr: Array[Byte] = Array(11, 22, 33, 44)
scala> val iArr = Array[Int](111111,222222,333333,444444)
iArr: Array[Int] = Array(111111, 222222, 333333, 444444)
scala> b print
res0: String = 0xff
scala> i print
res1: String = 0x000064
scala> bArr print
res2: String = 0xb0x160x210x2c
scala> iArr print
res3: String = 0x01b2070x03640e0x0516150x06c81c
scala>
source
share