Я уверен, что это очень просто сделать в Scala, но я не могу понять, какие намеки система типов должна сделать этой работой.Пытается расширить общий массив
Я хочу иметь абстрактный класс для печати, а затем неявно преобразовывать в него другие классы. Более конкретно, я хочу неявно преобразовать Byte в Printable и Array [Byte] в Printable.
Так что я сделал это:
abstract class Printable{
def print():String
}
class PrintableByte(b:Byte) extends Printable{
def print() = "" /*return something*/
}
implicit def printableByte(b:Byte) = new PrintableByte(b)
class PrintableArray(a:Array[Printable]) extends Printable{
def print() = {
for(i <- 0 until a.length) a(i).print() // no problems here
"" /*return something*/
}
}
implicit def printableArray(a:Array[Printable]) = new PrintableArray(a)
Однако:
val b:Byte = 0
b.print() //no problem here
val a= new Array[Byte](1024)
a.print() //error: value print() is not a member of Array[Byte]
Я ожидал, что система типа будет в состоянии понять, что Array [Byte] неявно массив [Версия для печати] и неявно Printable.
Что мне не хватает?
Массивы изменились коренным образом от Scala 2.7 до 2.8. Что вы используете? –
Я использую 2.8 RC7 – hbatista
Как вы можете видеть из ответов, это не имеет никакого отношения к тому, как работают массивы, и решение должно быть одинаковым как в Scala 2.7, так и в Scala 2.8. –