[Feature] ..$
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.03.13 19:16
Оценка: 49 (5)
Немного доработал сплайс ..$. Теперь:
1. Сплайс ..$ позволяет передать в него IEnumerable[PExpr], а не только list[PExpr].
2. Сплайс ..$ можно использовать внутри последовательностей кода, а не только в скобках.

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

Пример:
// Файл: Issue-git-480-macro.n
// REFERENCE: Nemerle.Compiler

public macro M()
{
  def args1 = [<[ 3 ]>, <[ 4 ]>];
  def args2 = [<[ 6 ]>, <[ 7 ]>];

  def q = array[<[ def a = x + 1; ]>, <[ def b = a + x; ]>];
  def x = <[ { def c = b * 2; def d = c + a + x; } ]>;

  <[ 
    def tuple = (1, 2, ..$args1, 5, ..$args2);
    DebugPrint(tuple);
    def x = 2;
    ..$q;
    DebugPrint(a);
    ..$x;
    DebugPrint(b);
    DebugPrint(c);
    DebugPrint(d);
    d
  ]>
}


Тест:
// Файл: Issue-git-480.n
//REFERENCE: Issue-git-480-macro

System.Console.WriteLine(M());

/*
BEGIN-OUTPUT
tuple ==> (1, 2, 3, 4, 5, 6, 7)
a ==> 3
b ==> 5
c ==> 10
d ==> 15
15
END-OUTPUT
*/



Дополнительные примеры по ссылкам.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.