На мой взгляд, одной из самых замечательных особенностей Scala является его совместимость с Java и похожий синтаксис. Одна вещь, которая мне показалась странной, - это использование _
оператора для импорта пакетов вместо *
оператора, который используется в Java.
Есть ли техническая причина для использования _
вместо *
? Если нет, то почему это изменение было сделано?
Ответы:
В Scala
*
это действительный идентификатор. Можно написать:В результате получается:
Можно написать класс, названный
*
так:Так что в этом случае, когда у меня есть класс
*
в пакете,us.hexcoder
и я пишу:Вы бы сказали, что хотите импортировать класс с именем
*
. Из-за этого Scala нужно было использовать другой символ для обозначения импорта по шаблону. По какой-то причине они решили использовать_
в качестве символа подстановки.источник
*
должен быть включен для умножения. Поэтому в качестве зарезервированного персонажа нужно было выбрать другого менее распространенного персонажаВ функциональных языках символ _ обычно используется, чтобы сказать: «Мне не важен этот параметр» или «Здесь все может пойти». Расширение этого значения до импорта пространства имен имеет смысл.
источник
В дополнение к ответу Гленна,
import
это допустимое утверждение в любом месте Scala, и вы можетеimport
включить объект или экземпляр в область видимости. Поскольку*
он, очевидно, является членом многих классов, его нельзя использовать в качестве подстановочного знака дляimport
оператора. Таким образом, вы получите строку, которая не должна быть действительным идентификатором._
приходит в голову. Тот факт, что он используется в других местах для другого значения (экзистенциальный тип, функция как экземпляр), также связан с той же проблемой.источник
В Scala есть десятки мест, где используется подчеркивание. Использование его для импорта подстановочных знаков является просто логическим следствием.
источник