Pascal and was not copied in successor languages like Ada or Modula-2.
which happens to be Pascal (ISO10206).
�� 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.