Я пытаюсь добавить функциональность в scala.collection.Iterable trait, а точнее, функцию printate, которая выполняет итерацию через элементы и выводит их (на консоль, если есть нет параметров, в противном случае для параметра выходного потока). Я использую предопределенный метод расширения, который я создал для объекта, printSelf(). Однако это вызывает ошибку компилятора: «Значение printSelf не является членом параметра типа Object». Я также хотел бы иметь это отдельный файл, так что мне легко использовать несколько проектов и приложений.Scala Неявное преобразование типов классов с параметрами типа
Вот мой текущий код для моего файла преобразования:
import java.io.OutputStream
import scala.collection.Iterable
package conversion{
class Convert {
implicit def object2SuperObject(o:Object) = new ConvertObject(o)
implicit def iterable2SuperIterable[Object](i:Iterable[Object]) = new ConvertIterable[Object](i)
}
class ConvertObject(o:Object){
def printSelf(){
println(o.toString())
}
def printSelf(os:OutputStream){
os.write(o.toString().getBytes())
}
}
class ConvertIterable[Object](i:Iterable[Object]){
def printerate(){
i.foreach {x => x.printSelf() }
}
def printerate(os:OutputStream){
i.foreach { x => x.printSelf(os) }
}
}
}
Я также получаю подобную ошибку в коде, который пытается проверить это, «значение printerate не является членом scala.collection. immutable.Range ':
import conversion.Convert
package test {
object program extends App {
new testObj(10) test
}
class testObj(i: Integer) {
def test(){
val range = 0.until(i)
0.until(i).printerate()
}
}
}
Что случилось с тем, как я приближаюсь к преобразованию этого типа?
В стиле записки, рассмотреть вопрос об использовании неявных классов вместо объекта с неявными DEFS: HTTP: //docs.scala- lang.org/overviews/core/implicit-classes.html. – Gal