I would like to know whether it's a design choice or a technical obstacle.I've seen:Parser>>assignment: varNode" var ':=' expression => AssignmentNode."| loc start |(loc := varNode assignmentCheck: encoder at: prevMark + requestorOffset) >= 0ifTrue: [^self notify: 'Cannot store into' at: loc]......TempVariableNode>>assignmentCheck: encoder at: location^((self isBlockArg and: [Parser allowBlockArgumentAssignment not])or: [self isMethodArg]) "<-- not allowed !"ifTrue: [location]ifFalse: [-1]But no explanation :(LaurentOn Sun, Nov 28, 2010 at 10:59 AM, Max Leske <maxleske@gmail.com> wrote:
Yeah, that's true, I've noticed that too. I guess it's on purpose but I have no idea. AFAIK you can't assign a new value to a parameter anywhere in the method not only when using blocks. Maybe it's not possible because there is not really a 'variable' but only a reference. So assigning a new value to the parameter would effectively override the reference. But don't trust me on this....Cheers,MaxOn 28.11.2010, at 10:54, laurent laffont wrote:Sorryfoo: n^[:i| n := n+i. ]
vs
foo: n
|s|
s := n.
^[:i| s := s+i. ]Laurent
On Sun, Nov 28, 2010 at 10:51 AM, Max Leske <maxleske@gmail.com> wrote:In the first example you didn't declare 's':foo:n^ [ :i || s | s:= s+i ]Or did I misunderstand the question?Cheers,MaxOn 28.11.2010, at 10:30, laurent laffont wrote:Hi,I can't writefoo: n^[:i| s := s+i. ]butfoo: n
|s|
s := n.
^[:i| s := s+i. ]
Why ?Cheers,
Laurent Laffont
Pharo Smalltalk Screencasts: http://www.pharocasts.com/
Blog: http://magaloma.blogspot.com/