<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.E-MailFormatvorlage19
        {mso-style-type:personal-compose;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=DE link="#0563C1" vlink="#954F72" style='word-wrap:break-word'><div class=WordSection1><p class=MsoNormal><span lang=EN-CA style='mso-fareast-language:EN-US'>I added something similar to my Values package (VW and ports).<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='mso-fareast-language:EN-US'>The source is<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-CA style='font-family:"Courier New";mso-fareast-language:EN-US'>SequenceableCollection>>asArgumentsIn: aBlock<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-CA style='font-family:"Courier New";mso-fareast-language:EN-US'>     "Evaluate aBlock with the receiver's elements as parameters.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-CA style='font-family:"Courier New";mso-fareast-language:EN-US'>     aBlock takes its arguments from the receiver.<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-CA style='font-family:"Courier New";mso-fareast-language:EN-US'>     'ok'<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-CA style='font-family:"Courier New";mso-fareast-language:EN-US'>     #(1 2 3) asArgumentsIn: [:a :b :c | a + b + c]<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-CA style='font-family:"Courier New";mso-fareast-language:EN-US'>     #(1 2 3) asArgumentsIn: [:a :b | a + b]<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-CA style='font-family:"Courier New";mso-fareast-language:EN-US'>     #(1 2 3) asArgumentsIn: [:a | a]<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-CA style='font-family:"Courier New";mso-fareast-language:EN-US'>     #(1 2 3) asArgumentsIn: [42]<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-CA style='font-family:"Courier New";mso-fareast-language:EN-US'>     'not ok'<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-CA style='font-family:"Courier New";mso-fareast-language:EN-US'>     #(1 2 3) asArgumentsIn: [:a :b :c :d | a + b + c + d]<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-CA style='font-family:"Courier New";mso-fareast-language:EN-US'>     "<o:p></o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-CA style='font-family:"Courier New";mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-CA style='font-family:"Courier New";mso-fareast-language:EN-US'>     ^aBlock cullWithArguments: self asArray</span><span lang=EN-CA style='mso-fareast-language:EN-US'><o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-CA style='mso-fareast-language:EN-US'>The difference is that it takes a list of any size and picks out the first items and binds them to the variables.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='mso-fareast-language:EN-US'>I use it often for CSV processing like<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='mso-fareast-language:EN-US'>                </span><span lang=EN-CA style='font-family:"Courier New";mso-fareast-language:EN-US'>(line tokensBasedOn: $;) asArgumentsIn: [:first :second :y | … ].<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-CA style='mso-fareast-language:EN-US'>I am just a bit unhappy with the name – it is too long. It reads ok though.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='mso-fareast-language:EN-US'>The pipe character is an interesting idea. I have to think about it.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-CA style='mso-fareast-language:EN-US'>I am use it for a while now and I am very happy with it.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-CA style='mso-fareast-language:EN-US'>Happy hacking,<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'>Christian<o:p></o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><p class=MsoNormal><span style='mso-fareast-language:EN-US'><o:p> </o:p></span></p><div style='border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b>Von:</b> Cuis-dev <cuis-dev-bounces@lists.cuis.st> <b>Im Auftrag von </b>Luciano Notarfrancesco via Cuis-dev<br><b>Gesendet:</b> Mittwoch, 21. Juni 2023 15:13<br><b>An:</b> Discussion of Cuis Smalltalk <cuis-dev@lists.cuis.st><br><b>Cc:</b> Luciano Notarfrancesco <luchiano@gmail.com><br><b>Betreff:</b> [Cuis-dev] Methods that return multiple values<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p><p class=MsoNormal>Smalltalk doesn’t have a convention for methods returning multiple values, and I’m not aware of any implementation.<o:p></o:p></p><div><p class=MsoNormal>An example of such thing is the extended gcd: ‘a xgcd: b’ returns g, s, t where g is the gcd, and as + bt = g. Writing methods that return multiple values is easy with the curly brackets syntax, Integer>>#xgcd: ends with something like<o:p></o:p></p></div><div><p class=MsoNormal>    ^ {g. s. t}<o:p></o:p></p></div><div><p class=MsoNormal>But using sending messages that return multiple values is kind of annoying, I end up doing something like:<o:p></o:p></p></div><div><p class=MsoNormal>    xgcd := a xgcd: b.<o:p></o:p></p></div><div><p class=MsoNormal>    g := xgcd at: 1.<o:p></o:p></p></div><div><p class=MsoNormal>    s := xgcd at: 2.<o:p></o:p></p></div><div><p class=MsoNormal>    t := xgcd at: 3<o:p></o:p></p></div><div><p class=MsoNormal>Some years ago I thought about using blocks for this, but I never tried it. Today I just did a little experiment implementing anArray | aBlock as ‘^ aBlock valueWithPossibleArgs: self’ and I can do:<o:p></o:p></p></div><div><p class=MsoNormal>    (a xgcd: b) | [:g :s :t| … ]<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>This is seems quite nice already, I guess I’ll start using it and see how it feels. But the point of this mail is not to show a solution, but to ask if anyone have thought about this or if they know any nicer solutions. Any ideas?<o:p></o:p></p></div></div></body></html>