Login  Register

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

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 <[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, 

Laurent Laffont

Pharo Smalltalk Screencasts: http://www.pharocasts.com/
Blog: http://magaloma.blogspot.com/