GithubHelp home page GithubHelp logo

Comments (6)

stevedonovan avatar stevedonovan commented on May 26, 2024

Yeah, I see exactly what you mean - it's a sneaky feature. It allows a certain lazy style of inheritance; base ctor takes a string; subclasses can be made without explicit ctors, confident that the base ctor will be passed the string. Well, if you remember to pass it, of course - nasty stuff to document! I am tending towards 'everything is explicit' these days so maybe it should just go.

from penlight.

asb avatar asb commented on May 26, 2024

But A:_init is an instance constructor - why would it ever be correct that it would be called when creating a new class? Have I not 1) created a new class and assigned it to A. 2) defined _init for class A and 3) created a new class and assigned it to B? Why should action 3) results in A:_init being called?

from penlight.

stevedonovan avatar stevedonovan commented on May 26, 2024

Sorry, I misread you - I tried exactly the code you gave, and yes, I get also get a ridiculous result! Genuine, first class bug!

from penlight.

stevedonovan avatar stevedonovan commented on May 26, 2024

This is very interesting - pl.class is one of the modules that changed - require 'pl.class' returns the actual class object. So if were

    class = require ('pl.class')

then things work fine - which is why I didn't see the problem at first. By some horrible fluke class.class exists and is a function, so everything looks hunky dory until it falls over.

from penlight.

asb avatar asb commented on May 26, 2024

Ah I see, the previous version of Penlight I was using exported something like class, Map, and Set. But as you say it just returns pl.class now, so when I do require("pl.class").class the __index on the returned pl.class is called. This is a case of programmer error resulting from API breakage that probably turned out to cause more trouble than intended (due to the __index on pl.class). I'll mark it closed.

from penlight.

stevedonovan avatar stevedonovan commented on May 26, 2024

What I will do is detect this particular case and issue a stern warning, otherwise it is going to cause confusion! (The other option is to regard it as an error)

from penlight.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.