Классные имена классов и методов, заключенные в ``: class `Это классный класс` {}?

Я только что нашел код scala, который имеет странное имя класса:

 class `This is a cool class` {}

и имя метода:

 def `cool method` = {}

Мы можем использовать предложение для имени класса или метода!

Это очень круто и полезно для модульного тестирования:

class UserTest {
   def `user can be saved to db` {
      // testing
   }
}

Но почему мы можем это сделать? Как это понять?

Ответ 1

Эта функция существует для взаимодействия. Если Scala имеет зарезервированное слово (например, with), то вы все равно можете ссылаться на код с других языков, которые используют его как метод или переменную или что угодно, используя обратные ссылки.

Так как не было причин запрещать почти произвольные строки, вы можете использовать почти произвольные строки.

Ответ 2

Как ответил @Rex Kerr, эта функция предназначена для взаимодействия. Например,

Чтобы вызвать метод java,

Thread.yield()

вам нужно написать

Thread.`yield`()

поскольку yield - это ключевое слово в scala.

Ответ 3

Scala Спецификация языка:

Существует три способа формирования идентификатора. Во-первых, идентификатор может начните с буквы, за которой может следовать произвольная последовательность буквы и цифры. За этим могут следовать символы подчеркивания _ и другая строка, состоящая из букв и цифр или символов оператора. Во-вторых, идентификатор может начинаться с оператора символ, за которым следует произвольная последовательность символов оператора. Предыдущие две формы называются равными идентификаторами. Наконец, идентификатор также может быть сформирован произвольной строкой между обратные кавычки (хост-системы могут налагать некоторые ограничения, на которые строки являются законными для идентификаторов). Затем идентификатор состоит из все символы, исключая сами обратные кавычки.

Ответ 4

Строки, завернутые в `, являются действительными идентификаторами в Scala, а не только для имен классов и методов, но и для функций и переменных.

Ответ 5

Для меня просто, что синтаксический анализатор и компилятор были построены таким образом, что это позволяет, поэтому команда Scala реализовала его.

Я думаю, что для кодера может быть здорово дать настоящие имена для функций вместо getThisIncredibleItem или get_this_other_item.

Спасибо за ваши вопросы, которые узнали меня что-то новое в Scala!