Почему синтаксис параметра Scala By-Name не выполняется при удалении пробела между: и => - PullRequest
0 голосов
/ 08 сентября 2018

У меня просто вопрос в отношении синтаксиса именованных параметров Scala. Я создал приведенный ниже фрагмент кода, и он работает нормально. Однако когда я удалил пробел между a: =>Int до a:=>Int, произойдет сбой.

Это работает без проблем:

object Calculator extends App {
  def sum(a: => Int) = (b: Int) => a + b
  println(sum(4)(5))
}

Следующая ошибка завершается ошибкой синтаксиса при удалении пробела в строке 2 в sum(a:=>Int):

object Calculator extends App {
  def sum(a:=> Int) = (b: Int) => a + b
  println(sum(4)(5))
}

Почему второй фрагмент кода не компилируется?

1 Ответ

0 голосов
/ 08 сентября 2018

Сбой на самом первом этапе, во время лексического анализа, потому что :=> является действительным идентификатором Scala:

val :=> = 42
println(:=>)  // prints 42

Следовательно, ваш код

def sum(a:=> Int) = ??? // wrong: unexpected identifier `:=>`

так же недействительно, как, скажем,

def sum(a+= Int) = ??? // wrong: unexpected identifier `+=`

или

def sum(a:: Int) = ??? // wrong: unexpected identifier `::`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...