it becomes like a programming language.<div>Could it be used to allow restricted user customization.</div><div>Like a scripting language given some kind of </div><div>hierarchical editor.<br><br>On Monday, September 26, 2016, Kjell Godo &lt;<a href="mailto:squeaklist@gmail.com">squeaklist@gmail.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">When is a MessageSend better than a BlockClosure?<div>I would like to know.  Because you can change it?</div><div>You can look inside.  What if the arguments were Blocks.</div><div>You could easily make a tree of MessageSends</div><div>(</div><div>( M message1:( M message2: obj2 )</div><div>      message1:( M message3: obj31</div><div>                              message3: obj32 ) </div><div>) receiverDeep:{ r1. r2. r3 }&quot;&lt;---[ left right top down traverse ]&quot;</div><div>) valueDeep<br><br>On Monday, September 26, 2016, Kjell Godo &lt;<a href="javascript:_e(%7B%7D,&#39;cvml&#39;,&#39;squeaklist@gmail.com&#39;);" target="_blank">squeaklist@gmail.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">M class&gt;&gt;doesNotUnderstand: aMessage ^aMessage asMessageSend !<div><br></div><div>( ( M som:eMe:ssa:ge: inputs ) receiver: obj )<br><br>On Monday, September 26, 2016, Kjell Godo &lt;<a>squeaklist@gmail.com</a>&gt; wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">M&gt;&gt;doesNotUnderstand: aMessage ^aMessage asMessageSend !<div><br></div><div>( M handUserSorterMorphForProjec<wbr>tNamed: nil )&quot;&lt;---[ easy way to make a MessageSend ]&quot;</div>...<br><div>     sendTo: obj<br><br>On Monday, September 26, 2016,  &lt;<a>commits@source.squeak.org</a>&gt; wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Tim Felgentreff uploaded a new version of EToys to project The Trunk:<br>
<a href="http://source.squeak.org/trunk/EToys-tfel.253.mcz" target="_blank">http://source.squeak.org/trunk<wbr>/EToys-tfel.253.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: EToys-tfel.253<br>
Author: tfel<br>
Time: 26 September 2016, 11:40:48.856552 am<br>
UUID: a00694aa-7017-b444-a8d0-6671ec<wbr>171efd<br>
Ancestors: EToys-tfel.252<br>
<br>
delete the project saving morph before saving<br>
<br>
=============== Diff against EToys-tfel.252 ===============<br>
<br>
Item was changed:<br>
  ----- Method: EToyProjectDetailsMorph&gt;&gt;doOK (in category &#39;utilities&#39;) -----<br>
  doOK<br>
        &quot;User hit the ok button in the project-info dialog.  Store the updated project-info back in the project. Call the message-send residing in the receiver&#39;s actionBlock to carry out any subsequent desired task.  Note that this method sets the &#39;arguments&#39; of the message-send in the actionBlock&quot;<br>
<br>
        | args actionSelector  |<br>
        self validateTheProjectName ifFalse: [^false].<br>
        projectDetails := self copyOutDetails.<br>
<br>
        theProject acceptProjectDetails: projectDetails.  &quot;Make sure project &amp; world feel the changes&quot;<br>
+<br>
+       self delete.<br>
-<br>
        actionBlock isMessageSend &quot;new way -- hopefully all cases&quot;<br>
                ifTrue:  &quot;please excuse this ugly, non-modular code...&quot;<br>
                        [actionSelector := actionBlock selector.<br>
                        args := (actionSelector = #handUserSorterMorphForProject<wbr>Named:)<br>
                                ifTrue:<br>
                                        [{theProject name}]<br>
                                ifFalse:<br>
                                        [actionSelector numArgs = 0<br>
                                                ifTrue:<br>
                                                        [nil]<br>
                                                ifFalse:<br>
                                                        [Array with: projectDetails]].<br>
                        actionBlock arguments: args.<br>
                        actionBlock value]<br>
<br>
                ifFalse:  &quot;Old way, with actionBlock actually a block of one argument.  This should no longer occur.&quot;<br>
+                       [actionBlock value: projectDetails].!<br>
-                       [actionBlock value: projectDetails].<br>
-<br>
-       self delete!<br>
<br>
Item was changed:<br>
  ----- Method: EToyProjectQueryMorph&gt;&gt;doOK (in category &#39;ok button hit&#39;) -----<br>
  doOK<br>
        &quot;User hit the ok button in the project-query dialog.&quot;<br>
<br>
        | details |<br>
        details := self copyOutDetails.<br>
<br>
+       self delete.<br>
        actionBlock isMessageSend &quot;new way -- hopefully all cases&quot;<br>
                ifTrue:<br>
                        [actionBlock arguments: {details. actionBlock arguments second}.<br>
                        actionBlock value]<br>
<br>
                ifFalse:  &quot;Old way, with actionBlock actually a block of one argument.  This should no longer occur.&quot;<br>
+                       [actionBlock value: details].!<br>
-                       [actionBlock value: details].<br>
-<br>
-       self delete!<br>
<br>
<br>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>