The Pascal 'with' statement is among the most hated features of Pascal and was not copied in successor languages like Ada or Modula-2. It was typically replaced by record constructors, such as Book1 := Book[title : 'C Programming'; author : 'Nuha Ali '; subject : 'C Programming Tutorial'; book_id : 6495407]; which happens to be Pascal (ISO10206).
In self classes do: [:class | | metaclass | metaclass := class metaclass. metaclass xxxx. mataclass yyyy. ] "metaclass" is a a block temporary, not an instance variable, and self classes do: [:each | (each metaclass) xxxx; yyyy]. suffices. We observe that [:x1 ... :xn | ...] value: e1 ... value: en is nothing other than a LET expression wearing a funny hat and should be inlined by a compiler -- mine does -- and that e1 in: [:x1 | ...] is just a "flipped" version of [:x1 | ...] value: e1, so there's no reason why a compiler shouldn't inline that. We also observe that e0 m1; ... ; mn can -- at least in my experience -- be most simply implemented as [:t | t m1. ... t mn] value: e0 followed by the usual inlining of that. So we might expect that some day self classes do: [:each | each metaclass in: [:t | t xxxx. t yyyy]] would generate the *same* code as the cascaded version. Right now, do whichever is clearer. On Tue, 5 Mar 2019 at 02:07, Tim Mackinnon <tim@testit.works> wrote: > I’ve noticed that as we’ve progressed there has been a move to more > concise and fluid code - e.g. I quite like the new String streaming stuff > > e.g. > > ^ String > streamContents: [ :stream | > stream nextPut: …. ] > > > So I was wondering why we don’t have a construct like Pascals with to > avoid Book1.title, Book1.author etc. > > (* book 1 specification *)With Book1 dobegin > title := 'C Programming'; > author := 'Nuha Ali '; > subject := 'C Programming Tutorial'; > book_id := 6495407;end; > > > I often find it a bit tedious with code like the following which then > needs an instvar... > > self classes do: [ :class | > | metaclass | > metaclass := class metaclass. > metaclass xxxx. > mataclass yyyy. > ] > > > I’m wondering why we don’t have #with:do: > > class with: class metaclass do: [:metaclass | > metaclass xxx. > ] > > > But when such things aren’t there - there is usually a good reason and I’m > curious … this said, there are all kinds of other such tricks (which I > rarely use that I keep coming across). > > Tim > >