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.