Могло ли Scala «if… else» быть реализовано как библиотечная функция?

Мне интересно, можно ли было if… else реализовать в Predef с специальная обработка компилятора, аналогичная тому, что делается с classOf [A] : определение находится в Predef , реализация заполняется компиляцией r.

Конечно, многих людей обнадеживает то, что if всегда является if , а else всегда является else , вне зависимости от контекста. Однако определение else как метода для типа результата if удалит его из списка ключевых слов и позволит разработчикам библиотек определять свои собственные методы else . (Я знаю, что могу использовать любое ключевое слово в качестве идентификатора с обратными кавычками, но что-то вроде `else` просто ужасно выглядит в коде.) Такие методы могут быть полезны в обсуждаемых случаях в таких ситуациях, как как этот, обсуждаемый в списке рассылки , где люди вынуждены использовать иначе при определении методов, которые на самом деле должны называться else . (Также обсуждается на SO здесь и здесь .)

Итак:

  • Возможен ли такой подход даже теоретически, или он нарушает какой-то фундаментальный принцип в Scala?
  • Каковы будут недостатки?

7
задан Community 23 May 2017 в 11:55
поделиться