scala: псевдоним для ключевого слова? - PullRequest
1 голос
/ 05 мая 2011

есть ли способ создать псевдоним для ключевого слова scala?в частности, у меня есть некоторый шаблонный синтаксис, включающий «val», и для того, чтобы было легче читать, я хотел бы иметь возможность набирать что-то «@@» и переводить это в val.

Править:

В некоторых случаях может быть очень удобно иметь возможность заменить «lazy val», а не просто «val».Вариант использования имеет отношение к функции, которая действует как декоратор Python.Это выглядит так:

lazy val function = Decorate(function_ _)
def function_(x: Int, ...) = { ... }

было бы намного приятнее, если бы это выглядело так:

@ function = Decorate(function_ _)
def function_(x: Int, ...) = { ... }

просто так, чтобы не было вэл, сложенного поверх деф, гдеоба названия очень похожи.(имя функции не предназначено для вызова, поэтому лучше всего делать имена похожими.)

Ответы [ 4 ]

8 голосов
/ 05 мая 2011

Нет, нет.

(заполнитель, так что позвольте мне опубликовать)

1 голос
/ 05 мая 2011

Ой! Это не особо идиоматическая Scala.

Начнем с того, что вы называете метод "function_", это не одно и то же, метод - это просто член некоторого класса, функция - это отдельный объект (хотя метод может быть "поднята" к функции компилятором аналогично автобоксу примитивов).

Во-вторых, что такое Decorate? Начальная заглавная буква предполагает, что это одиночный символ, поэтому объект и единственная действительная «функция» в этом выражении!

Не могли бы вы опубликовать немного больше информации о том, что на самом деле делают метод и декоратор, чтобы я мог дать вам лучший пример того, как вы можете добиться того же в Scala?

0 голосов
/ 05 мая 2011

Если function_ никогда не вызывается напрямую, почему бы не написать

lazy val function = Decorate { (x: Int, ...) => ... }

или даже

/**
 * This version makes it more explicit that it's a function value.
 */
lazy val function: (Int, ...) => ReturnType =
   Decorate { (x, ...) => ... }

Рекомендуется некоторая осторожность: краткость и краткость - это две разные вещи. Здесь, похоже, вы пытаетесь купить несколько нажатий клавиш по очень высокой цене с точки зрения читабельности.

Обновление:

Если вы действительно хотите добиться более простого синтаксиса для такого рода вещей, вам понадобится плагин компилятора. Если вы собираетесь зайти так далеко, я бы предложил использовать синтаксис на основе аннотаций, который, вероятно, будет довольно интуитивно понятным для разработчиков Java / Scala:

@decorate(Memoize)
def slowFn(i: Int) = { ... }
0 голосов
/ 05 мая 2011

Я думаю, что для этого можно написать плагин компилятора Scala.По крайней мере плагин Eclipse на самом деле использует оригинальный компилятор Scala, поэтому он может действительно хорошо работает с IDE.

Кроме того: Даниэль С. Собрал прав: нет, нет 'т.

Тем не менее это звучит как большая проблема для небольшой выгоды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...