Scala 2.9.0
Если метод toHexString
не определен внутри Byte
, то компилятор пытается найти неявное преобразование в тип с помощью метода toHexString
, но на этот раз ему не повезло, и это является причиной ошибки компиляции , На самом деле IMHO RichByte
должен определять toHexString
метод (RichInt
и RichLong
имеют его).
Scala 2.8.1
Я запустил Scala с scala -Xprint:jvm
, чтобы посмотреть, что сделал компилятор:
scala> b.toHexString
// ... cutted the unimportant parts
scala.this.Predef.intWrapper(scala.this.Predef.byte2int(line4$object$$iw$$iw.b())).toHexString();
// ... cutted the unimportant parts
Как мы видим, сначала применяется неявное преобразование byte2int
, а после этого применяется неявное преобразование intWrapper
и возвращает экземпляр RichInt
, где определен метод toHexString
.
Но в настоящее время я не знаю, почему эти два неявных преобразования связаны друг с другом, потому что на самом деле Scala не позволяет создавать цепочки неявных преобразований ... Кто-нибудь может это осветить?