3

Ruby 用の内部 DSL を作成しようとしていますが、まだコーディングを開始していません。Ruby でこの構文が可能かどうか疑問に思っています。

IF more_than: 1, :class smells to: "god class", sense: HIGH and has "no temp attributes", sense: 0.5
THEN problem "some problem"
WITH ponderation percent: 10

また:

IF more_than: 1, :class
{
    smells to: 'god class', sense: 2
    and
    (
        has 'no temp attributes', sense: 0.5 or
        smells to: 'extensive coupling', sense: 1.5 or
        has 'refused parent Bequest', sense: HIGH or
        smells to: 'tradition breaker', sense: LOW
    )
    and
    (
        has :Method
        {
            smells to: 'extensive coupling', sense: 1.5
        }
    )
}
THEN
{ 
    problem "abusive conceptualization"
}
WITH
{
    ponderation percent: 10
}

更新: :D 私はまだ DSL の要件を定義しています。これが私の出発点です。カスタム パーサーまたは Ruby のいずれかを検討しています。カスタム パーサーを作成するか、Ruby を使用するか、どちらが良いと思いますか?

4

2 に答える 2

2

これは不可能です。問題は、これらの構造にあります。

:class to

引数をシンボルに渡すことはできません。メソッドにのみ渡すことができます。

于 2012-10-15T09:17:17.440 に答える
1

有効な Ruby 構文の代替バージョンを次に示します。

IF CLASS Student {
    smells to: 'god class', sense: 2 and
    has 'no temp attributes', sense: 0.5 or
    smells to: 'extensive coupling', sense: 1.5 or
    has 'refused parent bequest', sense: HIGH or
    smells to: 'tradition breaker', sense: LOW and
    has_method {
        smells to: 'extensive coupling', sense: 1.5
    }
}
THEN {
    problem 'abusive conceptualization'
}
WITH {
    ponderation percent: 10
}

更新:可能性をチェックしてきました.IF、THEN、WITHを大文字で使用できます。

于 2012-10-15T08:52:50.830 に答える