Здравствуйте, Воронков Василий, Вы писали:
ВВ>Не совсем. Мне тут товарищ серега дал ссылку на архив блогов:
ВВ>Extensible pattern matching
Это вот что такое:
#pragma indent
using Nemerle.Utility
[ExtensionPattern ( Node (t1, el, t2) = SNode (t1, el, t2, _) )] \
[ExtensionPattern ( t1 ::: t2 = SNode (t1, _, t2, _) )] \
public variant Tree
| SNode
l : Tree
e : int
r : Tree
size : int
| Nil
Size : int
get
match (this)
| SNode (_,_,_,s) => s
| Nil => 0
public Node (l : Tree, e : int, r : Tree) : Tree
SNode (l, e, r, l.Size + r.Size + 1)
public Insert (e : int) : Tree
match (this)
| Node (l, e', r) =>
if (e < e') l.Insert (e)
else if (e > e') r.Insert (e)
else this
| Nil =>
Node (Nil (), e, Nil ())
def t = Tree.Nil ().Insert (1).Insert (2).Insert (3)
match (t)
| Node (_, e, _) =>
System.Console.WriteLine (e)
| Nil => assert (false)
match (t)
| Tree.Node (el = e) =>
System.Console.WriteLine (e)
| Nil => assert (false)
match (t)
| _ ::: _ => {}
| Nil => {}
Это код теста из старой версии компилятора. В новом репозитории его видимо нет, но фича осталась. Фича довольно сомнительная в текущем виде, но она вшита в компилятор (следы есть в typing/Typer-PaternType.n и hierarchy/TypeInfo.n).
Код из wiki, который ты привел, это TODO к этой фиче.
Нашел в архиве блогов вот такое:
http://web.archive.org/web/20080226221638/nemerle.org/Extensible_matching
Однако даже минимальный пример у меня не собирается:
variant Test {
| Node { p :int; }
public CustomPattern (p: int) : Test {
Node(p)
}
pattern CustomPattern (p : int) = CustomPattern (p);
}
Эту фишку открутили?
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Нашел в архиве блогов вот такое:
ВВ>http://web.archive.org/web/20080226221638/nemerle.org/Extensible_matching
ВВ>Эту фишку открутили?
А ее прикручивали? Ты дал ссылку на какой-то TODO-список.
Меж тем ПМ работает по классам, так что сам пример можно воспроизвести без указанных наворотов.
Здравствуйте, VladD2, Вы писали:
ВВ>>Нашел в архиве блогов вот такое:
ВВ>>http://web.archive.org/web/20080226221638/nemerle.org/Extensible_matching
ВВ>>Эту фишку открутили?
VD>А ее прикручивали? Ты дал ссылку на какой-то TODO-список.
Не совсем. Мне тут товарищ серега дал ссылку на архив блогов:
http://web.archive.org/web/20080426004132/http://nemerle.org/blog/
Там есть запись "24 Jan 2006: Nemerle 0.9.2 in the wild", в которой данная фича указывается как реализованная:
This version brings a bunch of new features and of course several bugfixes. We now require mono 1.1.11+ or MS.NET 2.0. About 180 svn commits were done since the last release.
New language features:
Generators aka yield support
List comprehensions + ranges
Extensible pattern matching
'this' can be now used as the full type (including type parameters) of the current class.
Matching directly in function parameters, it is now possible to say
...
Вот это-то и вызвало удивление.