Объедините DSL-подобный вызов конструктора с объявлением анонимного класса

Возможно ли это?
Я пробовал что-то вроде этого:

object foo extends Foo {
    constructorNamedArg = "qqq";
} {
    abstractMethod() => bar.baz();
}

person guai    schedule 22.12.2015    source источник


Ответы (2)


Согласно спецификации, это невозможно, может быть только список позиционных аргументов.

person thradec    schedule 22.12.2015
comment
Как создать внутреннюю DSL на Цейлоне? Вероятно, используя древовидный синтаксис. Помимо этого, синтаксические улучшения, такие как монадический синтаксис, были бы очень желательны на Цейлоне, например. для прыжков на батуте, так как цейлон даже не делает правильную хвостовую рекурсию. Это требует введения новых переменных, что невозможно при использовании древовидного синтаксиса. Как лучше всего обойти эти недостатки на Цейлоне? - person Michael; 22.12.2015

Я бы не стал использовать наследование для этого. Вместо этого я бы определил Foo как конкретный класс:

class Foo(String constructorNamedArg, Baz abstractMethod()) {}

А сейчас на звонилке я бы написал:

Foo {
    constructorNamedArg = "qqq";
    abstractMethod() => bar.baz();
}

Или даже:

Foo {
    constructorNamedArg = "qqq";
    function abstractMethod() { 
        return bar.baz(); 
    }
}

На Цейлоне обычным рефакторингом является переход от абстрактного класса с формальными методами к конкретному классу, параметризованному функциями.

ХТН

person Gavin King    schedule 23.12.2015