Создание списка из ряда выражений в Scala.

Когда я пытаюсь построить внутренние DSL в Scala, я сталкиваюсь с общей проблемой, и я не могу создать решение. Чтобы все выглядело более похоже на типичный язык, я бы хотел, чтобы синтаксис выглядел примерно так:

model 'Foo {
  decl 'Real 'x;
  decl 'Real 'y;
}

На практике возникает несколько проблем. Первая проблема заключается в том, чтобы получить здесь объект modelдля приема двух аргументов таким образом. Если у кого-нибудь есть идеи, дайте мне знать. Но вместо этого я сделал что-то более похожее на это:

model('Foo) {
 ...
}

Где модель теперь является функцией, которая затем возвращает объект с помощью applyметода, который затем использует следующую лямбду. С которым я могу жить. Я мог бы жить с подобной проблемой и внутри лямбды, так что такие вещи, как decl 'Real 'xили decl('Real,'x)внутри. Но то, что я хочу сделать, это получить результаты всех этих выражений внутри волнистых фигурных скобок, чтобы получить «возврат» в виде списка. Другими словами, я хочу написать что-то вроде этого :

model 'Foo {
  decl('Real,'x);
  decl('Real,'y);
}

, где decl(...)оценивается как что-то типа Declaration, а {...}затем оценивается как List[Declaration]. Я подозреваю, что для этого есть какой-то способ использовать имплициты, но я не смог его найти. Короче говоря, я хотел бы сделать:

model 'Foo {
  decl('Real,'x);
  decl('Real,'y);
}

...оценку эквивалентной...

model 'Foo {
  decl('Real,'x) ::
  decl('Real,'y) ::
  Nil
}

Комментарии или предложения?

9
задан Michael Tiller 13 April 2012 в 10:15
поделиться