Как неявные типы в Scala работают со ссылкой на этот https://youtu.be/hC4gGCD3vlY?t=263
Как неявные типы в Scala работают со ссылкой на этот https://youtu.be/hC4gGCD3vlY?t=263.
Также я не понял, почему он упоминает, что объект convertAtoB является статическим.
1 ответ
Давайте начнем scala REPL с implicitConversion
флаг.
$ scala -language:implicitConversions
Welcome to Scala 2.12.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_151).
Type in expressions for evaluation. Or try :help.
Скажем, вы хотите, чтобы все целые числа были обернуты внутри числовой строки как "Number(input)"
,
Теперь вместо того, чтобы каждый раз вызывать функцию для преобразования int в требуемый тип, вы можете определить неявный метод, который однажды увидит ваш ввод и вывод, как определено в вашем неявном преобразователе, сделает это за вас.
пример,
scala> object NumberToString { implicit def wrapWithNumber(n: Int): String = s"Number(${n})" }
defined object NumberToString
Обратите внимание, что NumberToString
это класс Singleton или что static
класс находится в мире Java.
scala> import NumberToString._
import NumberToString._
Теперь, если вы просто определите переменную типа Int
, не будет никакого преобразования, потому что оно уже имеет тип Int
и компилятор счастлив.
scala> val asItis = 1000
asItis: Int = 1000
Но если вы зададите ему другой тип, компилятор будет искать неявные методы и выбирает тот, который соответствует.
scala> val richInt: String = 1000
richInt: String = Number(1000)