Scala's <-
стрелка кажется немного странной. Большинство операторов реализованы где-то в источнике как функция, определенная по типу данных, прямо или косвенно. <-
, с другой стороны, только кажется непригодным для использования вне определения for
, где он действует как синтаксический элемент, используемый для сигнализации привязки новой переменной в монадическом контексте (через map
).Is <- доступно только компилятору
Это единственный экземпляр, в котором я могу думать о том, где Scala имеет синтаксический элемент, выглядящий в операторе, который используется только в определенном контексте и не является фактической функцией.
Я не прав, как работает <-
? Является ли это особым символом случая, используемым только компилятором, или каким-то образом разработчик мог использовать это поведение при написании собственного кода?
Например, было бы возможно написать макрос для преобразования
forRange (i <- 0 to 10) { print(i) }
в
{ var i = 0; while (i <= 10) { print(i) } }
вместо стандартного map
эквивалента? Насколько я могу судить, любое использование i <- ...
вне контекста for
вызывает исключение из-за ссылки на неизвестное значение.
Я полагаю, что Скала испортила мне немного. Было несколько вещей, которые я изначально считал синтаксическим сахаром, специфичным для компилятора, который в конечном итоге строился на языковых функциях. Это одна из моих любимых вещей о Scala; большая часть его дизайна позволяет избежать особых дел. К сожалению, я не знаю, как еще вы это разработали. +1 и ** принять ** для вас. – KChaloux