Для того, чтобы подобные немного синтаксиса Scala, охранники в шаблоне соответствующих случаях не требуют скобок вокруг их условных выражений-например, следующее:
case i if i % 2 == 0 => i/2
так же действуют, как это:
case i if (i % 2 == 0) => i/2
Придерживаясь стиля C-семейства, это означает, что требуется последняя форма, даже если скобки не нужны для устранения неоднозначности. Разработчики языка Scala решили, что снижение линейного шума привело к тому, что в этом случае семейное сходство сведено.
Я думаю, что подобная мотивация на работу в синтаксисе match
, и на мой взгляд match (expr) { ... }
действительно выглядит довольно ужасно (и вводит в заблуждение) по сравнению с expr match { ... }
.
Кроме того, только сегодня днем я реорганизовал чужие x match { ... }
на Option
на x map { ... }
вместо этого. match
как оператор инфикса делает очевидным сходство между этими двумя выражениями.
По вопросу о том, почему match
это не просто метод, вот пять лет вопрос от Дэвида Поллака на the scala-debate
mailing list:
Почему «матч» уровень языковой конструкцией, а не метод на Любые?
И Martin Odersky's answer:
Раньше считалось, что путь в Scala 1. Я больше не знаю, почему мы изменили. подсветка синтаксиса? Отчет об ошибках? не уверен. Я не думаю, что имеет значение в любом случае.
Я с Мартином на этом.
Обратите внимание, что существует несколько практических различий (кроме простого вопроса «точка или нет»).Например, это не компилируется:
def foo[A, B](f: PartialFunction[A, B])(a: A) = a match f
Если match
еще метод на Any
, требуя буквальным кучу случаев будет довольно странное требование.
Учитывая, что можно написать * подобный * подобный методу метод (поскольку '{case ..}' создает PartialFunction), то выражение 'expr match {..}' можно рассматривать как синтаксис. Поддержка Scala для «бесчисленного метода» invocation "для' expr.match {..} ', тогда он будет соответствовать пользовательскому методу' expr.myMatch {..} '->' expr myMatch {..} '. Он также сохраняет согласованность с 'catch'. – user2246674
Hm. Правильно. Это похоже на одну действительную теорию. Люди Scala очень легко интегрируют пользовательские выражения, чтобы они выглядели как родные. Спасибо вам за ваши мысли по этому вопросу! Но остается вопрос: зачем только «матч»? – Lii
Я * думаю * Я видел этот выбор синтаксиса, о котором говорилось ранее (в соавторстве соавтором моего Мартина?), Но я не могу вспомнить, где. С другой стороны, синтаксис Scala иногда является тем, что я считаю «чрезмерно гибким». – user2246674