+1
On 28.11.2010, at 11:26, laurent laffont wrote: > 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 <[email protected]> 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 <[email protected]> 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/ >> >> > >
