Thanks Sven I thought that suddenly I was an idiot.
On Thu, Feb 22, 2018 at 11:47 AM, Sven Van Caekenberghe <s...@stfx.eu> wrote: > > >> On 22 Feb 2018, at 10:41, Clément Bera <bera.clem...@gmail.com> wrote: >> >> >> >> On Thu, Feb 22, 2018 at 7:52 AM, Stephane Ducasse <stepharo.s...@gmail.com> >> wrote: >> Clement >> >> can you open a bug entry so that we clean this situation? >> >> >> What is the bug? > > Having two selectors doing the same thing is bad and confuses everybody. So > that is a 'bug'. > >> You want to merge the two selectors and break compatibility with frameworks >> using the removed one? > > Either we keep on adding cruft (or leaving cruft in place) in the sake of > backwards compatibility or be do something about it. It is not hard to fix a > couple of senders. It could be done more softly with a deprecation. > > Cleanups at the level of Object are particularly valuable. > >> Stef >> >> On Mon, Feb 19, 2018 at 12:43 PM, Clément Bera <bera.clem...@gmail.com> >> wrote: >> > Hi, >> > >> > It seems the two methods have exactly the same behavior indeed. >> > valueWithPossibleArgs: anArray >> > valueWithEnoughArguments: anArray >> > >> > One was edited recently but I think it's only to change the comment, >> > they're >> > both very old. My guess is that there are two for compatibility purpose >> > (One >> > is the selector that is considered as the most relevant that should be >> > used, >> > the other one is the one also present in other Smalltalks so we have it for >> > cross-Smalltalk librairies or something like that), but only one is really >> > needed. If you need only the concept for SOM-NS you can just implement one, >> > if you want to be compatible with different Smalltalk lib implement both. >> > >> > All use-cases of these methods I have found do not inject nils, they expect >> > the block to have a number of arguments of the block less or equal to the >> > number of parameters in the argument array. I would say they're used as >> > #cullWithArguments: but for some reason other selector names were >> > preferred. >> > >> > Now, as you mentioned, these two methods are more than just >> > cullWithArguments: since they inject nils if there are not enough >> > parameters. To me it looks incorrect to do so because then while debugging >> > your code you will get issues due to those injected nils and it will be >> > tedious for the application programmer to track the problem down to these >> > two methods. >> > >> > There a few use-cases for nil injection though. Typically when changing >> > existing frameworks in multiple repositories, it may be that during the >> > update process the change to the caller is installed before the change of >> > the callee, and if the code is actually used (code in UI for instance), >> > injecting nils might avoid system break-down. Another use-case is for >> > compatibility with frameworks using the nil injection, but I can't find a >> > framework doing that right now. >> > >> > Honestly, I would not implement the nil injection, but maybe some one else >> > has a different point of view. >> > >> > On Fri, Feb 16, 2018 at 6:25 PM, Stefan Marr <smallt...@stefan-marr.de> >> > wrote: >> >> >> >> Hi: >> >> >> >> I am trying to understand the different between and perhaps origin of >> >> BlockClosure>>#valueWithPossibleArgs: and >> >> BlockClosure>>#valueWithEnoughArguments: >> >> >> >> I am trying to decide which of the two I need for SOMns. >> >> >> >> The first one has seen more recent changes, when looking at the Pharo 6.1 >> >> download: >> >> >> >> valueWithPossibleArgs: anArray —> 2/12/2017 StephaneDucasse >> >> valueWithEnoughArguments: anArray —> 3/11/2001 nk >> >> >> >> While they have rather different implementations, they seem to behave >> >> identically, as far as I could tell using the following example: >> >> >> >> blocks := { >> >> [ { } ]. >> >> [:a | { a } ]. >> >> [:a :b | { a. b } ]. >> >> [:a :b :c | { a. b. c } ] >> >> }. >> >> >> >> blocks collect: [:b | b valueWithPossibleArgs: {1}]. >> >> blocks collect: [:b | b valueWithPossibleArgs: {1. 2. 3}]. >> >> blocks collect: [:b | b valueWithEnoughArguments: {1}]. >> >> blocks collect: [:b | b valueWithEnoughArguments: {1. 2. 3}]. >> >> >> >> I was also wondering how they relate to #cull:* >> >> >> >> One of the major differences seems to be that valueWithP* and valueWithE* >> >> are both injecting nil for absent arguments, while normal #value* and >> >> #cull* >> >> methods signal an error. >> >> Is there a specific use case why one wouldn’t want to be strict here as >> >> well, but instead inject nils? >> >> >> >> Any comments or pointer appreciated. >> >> >> >> Thanks >> >> Stefan >> >> >> >> >> >> -- >> >> Stefan Marr >> >> School of Computing, University of Kent >> >> http://stefan-marr.de/research/ >> >> >> >> >> >> >> > >> > >> > >> > -- >> > Clément Béra >> > Pharo consortium engineer >> > https://clementbera.wordpress.com/ >> > Bâtiment B 40, avenue Halley 59650 Villeneuve d'Ascq >> >> >> >> >> -- >> Clément Béra >> Pharo consortium engineer >> https://clementbera.wordpress.com/ >> Bâtiment B 40, avenue Halley 59650 Villeneuve d'Ascq > >