Почему синтаксис параметра Scala By-Name не выполняется при удалении пробела между: и =>
У меня просто вопрос в отношении синтаксиса именованных параметров 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 ответ
Решение
Это терпит неудачу на самом первом этапе, во время лексического анализа, потому что :=>
действительный идентификатор 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 `::`