Oh, interesting! I did not know that, thanks Eliot.
On 1 May 2020, at 18:49, Eliot Miranda wrote: > Hi Max, > > On Thu, Apr 30, 2020 at 11:51 PM Max Leske <maxle...@gmail.com> wrote: > >> Hi Sean, >> >> You *need* an outer context. See Context>>cleanCopy, which Fuel uses to >> serialize blocks. >> > > One does *not* need an outer context. An outer context of nil should be > fine, provided that the block never attempts an up-arrow return. > > > | blockMethod | > blockMethod := [:a :b| a < b] method. > (FullBlockClosure receiver: nil outerContext: nil method: blockMethod > copiedValues: nil) value: 1 value: 2 > > So one needs to use FullBlockClosure > class>>receiver:outerContext:method:copiedValues: and one can supply nil > for the outerContext provided that the block does not do an up-arrow return. > > >> Cheers, >> Max >> >> On 1 May 2020, at 3:23, Sean P. DeNigris wrote: >> >> What am I not understanding about FullBlockClosure? >> >> I have a clean block that I'd like to turn into a FullBlockClosure so that >> I >> can serialize it without dragging (unneeded methods) into my object graph. >> However, documentation and in-image example usages seem severely limited. >> Here was one experiment that ended with a primitive failure. It seems like >> a >> receiver is needed and it can't be a dummy value (see commented "receiver: >> 1"). But what would the receiver be in the absence of an outer context?! >> >> aBlockClosure := [ :a :b | 1 + a + b ]. >> fbc := (FullBlockClosure >> outerContext: nil >> startpc: aBlockClosure startpc >> numArgs: aBlockClosure argumentCount >> copiedValues: Array new) "receiver: 1; yourself". >> >> fbc value: 2 value: 3. "PrimitiveFailed: primitive #value:value: in >> FullBlockClosure failed" >> >> >> >> ----- >> Cheers, >> Sean >> -- >> Sent from: http://forum.world.st/Pharo-Smalltalk-Developers-f1294837.html >> >> > > -- > _,,,^..^,,,_ > best, Eliot
signature.asc
Description: OpenPGP digital signature