Почему нельзя вызвать метод toHexString из байта начиная с Scala2.9.0? - PullRequest
4 голосов
/ 09 июня 2011

Scala2.8.1

scala> val a:Byte = 1
a: Byte = 1

scala> a.toHexString

res0: String = 1

, но Scala2.9.0

scala> val a:Byte = 1
a: Byte = 1

scala> a.toHexString
<console>:9: error: value toHexString is not a member of Byte
       a.toHexString
         ^

Почему нельзя вызывать метод toHexString из байта начиная с Scala2.9.0?

1 Ответ

3 голосов
/ 09 июня 2011

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 не позволяет создавать цепочки неявных преобразований ... Кто-нибудь может это осветить?

...