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) >= 0 ifTrue: [^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 :( Laurent On 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, Max
On 28.11.2010, at 10:54, laurent laffont wrote:
Sorry
foo: 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, Max
On 28.11.2010, at 10:30, laurent laffont wrote:
Hi,
I can't write
foo: n ^[:i| s := s+i. ]
but
foo: n |s| s := n. ^[:i| s := s+i. ]
Why ?
Cheers,
Laurent Laffont
Pharo Smalltalk Screencasts: http://www.pharocasts.com/ Blog: http://magaloma.blogspot.com/