On 07.03.19 11:38, spir wrote:
-1- How to enforce that subclasses implement given methods without using "abstract", which seems to make the whole class abstract?

Not, as far as I can tell. You can't force derived classes to override an existing implementation. And you can't omit the implementation without making the class abstract.

-2- How to have "constant" (predefined) class instances at the module-level?

Just like so?

const o = new Object; /* works for me */

The compiler requires a "static this ()".

For what code does it say that?

What does this actually mean (for a constructor)? What are the consequences, for either my code or client code? (The doc on the topic [2] is rather obscure for me, and I could not find better elsewhere.)

I'm also bluffed by "Static constructors have empty parameter lists." Does this mean I should manually fill the fields? (not a big deal, but why???) This may give:
     // Predefined pseudo-pattern "End-of-Text":
     auto EoT = new Pattern() ;       // ???
     EoT.name = "EoT" ;

     // Unique lexeme "end-of-text":
     auto eot = new Lexeme() ;       // ???
     eot.patname = "EoT" ;
     eot.slice = null ;
     eot.index = uint.max ;
Then, why have a constructor at all? This would also prevent me from making classes immutable, while conceptually all are immutable... (no reason for a pattern or a lexeme to change)

You're misunderstanding the nature of static constructors.

Static constructors are a special kind of function that runs once at the beginning of the program/thread, automatically. They're not constructors for static objects. You can't call static constructors from your code. `new Foo` calls a (normal) constructor; doesn't matter if you're creating a dynamic instance or a static one.

Reply via email to