:help E1377 has this paragraph:

    Unlike other languages, the constructor of the base class does not
    need to be invoked.  In fact, it cannot be invoked.  If some
    initialization from the base class also needs to be done in a child
    class, put it in an object method and call that method from every
    constructor().

That seems accurate, as in the following script `Bar` has its own
(implicitly defined) constructor, and the parent's constructor is not
invoked (no message is printed):

    vim9script

    class Foo
      var _y = 0

      def new(this._y, z: string)
        this.Init(z)
      enddef

      def Init(z: string)
        echomsg $'y={this._y}, z={z}'
      enddef
    endclass

    class Bar extends Foo
    endclass

    var bar = Bar.new(1) # Sets _y to 1, doesn't print anything

Now, I have a couple of remarks:

It seems a bit counterintuitive that `Bar` cannot be initialized like
`Foo`, but with either `Bar.new()` or `Bar.new(n)`.

It may be the case that `Init()` does something necessary for the
initialization of the object. But `Bar` does not call `Init()`, so `bar`
may be potentially broken.

Ok, all that is as documented and can be remedied, of course:

    class Bar extends Foo
      def new(this._y, z: string)
        this.Init(z)
        enddef
    endclass

    var bar = Bar.new(1, 'a') # OK

But:

- I have basically redefined the same constructor of the superclass;
- I must know the private members of `Foo` to do that;
- I must be aware that any constructor must call `Init()` for the
  correct initialization of the object. Again, I must know an
  implementation detail of the superclass.

Note that `Foo` may be a library object imported by arbitrary users in
arbitrary scripts.

Wouldn't it make more sense for `Bar` to have the parent's constructor
as a default?

Thanks,
Life.

-- 
-- 
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to vim_use+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_use/ur2trf%24hf%241%40ciao.gmane.io.

Reply via email to