Scalaで内部DSLを構築しようとすると、一般的な問題が発生し、解決策を作成できませんでした。物事をもう少し典型的な言語のように見せるために、構文を次のようにしたいと思います。
model 'Foo {
decl 'Real 'x;
decl 'Real 'y;
}
実際には、いくつかの問題があります。最初の問題はmodel
、この方法で2つの引数を取るオブジェクトをここで取得することです。誰かアイデアがあれば教えてください。しかし、代わりに私がやったことは、もう少し次のようなことをすることです。
model('Foo) {
...
}
apply
ここで、modelは、後続のラムダを消費するメソッドを持つオブジェクトを返す関数になりました。一緒に暮らせること。私はラムダの内部でも同様の問題を抱えて生きることができたので、内部のようなもの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
}
コメントや提案?