Re: Cannot assign a parameter
Posted by
laurent laffont on
Nov 28, 2010; 10:26am
URL: https://forum.world.st/Cannot-assign-a-parameter-tp3062241p3062272.html
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
<[hidden email]> 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
vs
foo: n
|s|
s := n.
^[:i| s := s+i. ]
Laurent
On Sun, Nov 28, 2010 at 10:51 AM, Max Leske
<[hidden email]> 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,