Yes this is the idea. We should the combinatorial explosion :) On Mon, May 22, 2017 at 1:27 PM, Gabriel Cotelli <[email protected]> wrote:
> If we can get rid off the myriad of class creation methods count me in. :) > > I would do something like: > > ClassBuilder new > name: #A; > superclass: Object; > addInstanceVariableNamed: 'a'; > addInstanceVariableNamed: 'c'; > addBooleanSlotNamed: 'z'; > addClassVariableNamed: 'D'; > use: SomeTrait; > use: SomeOtherTrait; > beWeak "if you want a weak subclass"; > build > > With all of this optional. If we can avoid to pass nil as superclass for > the cases you don't have a superclass that would be good, maybe an specific > method in the builder ? > > On Mon, May 22, 2017 at 4:25 AM, Luc Fabresse <[email protected]> > wrote: > >> Hi, >> >> Following Pharo Days, I brainstormed about some possible class definition >> syntaxes. >> What I have in mind: >> >> "basic mechanics, only THIS one in the image!" >> ClassDefinition new >> superclass: Object; "optional. If not specified, Object by default ;-)" >> name: #A; "optional and create an anonymous class if not specified" >> instVars: 'a b c'; >> traits: {TEquality}; >> package: 'Plop'; >> createClass. " this message sent might be hidden by the browser when >> accepting" >> >> "---------------" >> "Some IDEAS (but I did not find one that I really like) of >> scripting/shorter syntaxes that must ALWAYS end up calling the above basic >> mechanics at the end:" >> >> Class fromDefinition: [ :def | >> def name: #sub; >> instVars: 'w r g'; >> superclass: Object ]. >> >> Object subclass "<-- returns a subclass of Object but the problem is >> that the new class is muted each time and the class definition is not >> explicit" >> name: #A; >> ivs: 'a b c'; >> traits: { TEquality }. >> >> { #superclass -> Object. >> #name -> #sub. >> #instVars -> 'a b c' } asClass. >> >> { Object asSuperclass. >> #sub asClassName. >> 'a b c' asInstVars. >> 'c' asClassVar } asClass. >> >> "litteral approach" >> #( name A >> superclass Object >> instVars #(a b c) >> instVar d >> ) asClass >> >> >> #Luc >> > >
