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 <<a href="mailto:squeaklist@gmail.com">squeaklist@gmail.com</a>> 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 }"<---[ left right top down traverse ]"</div><div>) valueDeep<br><br>On Monday, September 26, 2016, Kjell Godo <<a href="javascript:_e(%7B%7D,'cvml','squeaklist@gmail.com');" target="_blank">squeaklist@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">M class>>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 <<a>squeaklist@gmail.com</a>> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">M>>doesNotUnderstand: aMessage ^aMessage asMessageSend !<div><br></div><div>( M handUserSorterMorphForProjec<wbr>tNamed: nil )"<---[ easy way to make a MessageSend ]"</div>...<br><div> sendTo: obj<br><br>On Monday, September 26, 2016, <<a>commits@source.squeak.org</a>> 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>>doOK (in category 'utilities') -----<br>
doOK<br>
"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's actionBlock to carry out any subsequent desired task. Note that this method sets the 'arguments' of the message-send in the actionBlock"<br>
<br>
| args actionSelector |<br>
self validateTheProjectName ifFalse: [^false].<br>
projectDetails := self copyOutDetails.<br>
<br>
theProject acceptProjectDetails: projectDetails. "Make sure project & world feel the changes"<br>
+<br>
+ self delete.<br>
-<br>
actionBlock isMessageSend "new way -- hopefully all cases"<br>
ifTrue: "please excuse this ugly, non-modular code..."<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: "Old way, with actionBlock actually a block of one argument. This should no longer occur."<br>
+ [actionBlock value: projectDetails].!<br>
- [actionBlock value: projectDetails].<br>
-<br>
- self delete!<br>
<br>
Item was changed:<br>
----- Method: EToyProjectQueryMorph>>doOK (in category 'ok button hit') -----<br>
doOK<br>
"User hit the ok button in the project-query dialog."<br>
<br>
| details |<br>
details := self copyOutDetails.<br>
<br>
+ self delete.<br>
actionBlock isMessageSend "new way -- hopefully all cases"<br>
ifTrue:<br>
[actionBlock arguments: {details. actionBlock arguments second}.<br>
actionBlock value]<br>
<br>
ifFalse: "Old way, with actionBlock actually a block of one argument. This should no longer occur."<br>
+ [actionBlock value: details].!<br>
- [actionBlock value: details].<br>
-<br>
- self delete!<br>
<br>
<br>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>