tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From André Warnier ...@ice-sa.com>
Subject Re: [OT] of the different methods to get a user-id
Date Fri, 13 Feb 2009 09:09:20 GMT
Caldarale, Charles R wrote:
>> From: Christopher Schultz [mailto:chris@christopherschultz.net]
>> Subject: Re: [OT] of the different methods to get a user-id
>>
>> I don't understand that, either. I suppose this works differently in
>> different languages, though:
>>
>> return i++;
>>
>> return (i++);
> 
> Not any that I'm aware of; the value of the i++ expression is the same, regardless of
the number of parentheses you wrap it in.
> 
>> I tried in C and Java and got the same result (both
>> return the original value of i), though I would have
>> expected something different.
> 
> Nope; the parentheses in such a statement control only operator precedence, not anything
else.  Don't confuse parentheses used in an expression with those used for function calls
or if/while statements - they're syntactically different, even if they share the same code
point.
> 
I was going to let that one pass, but now I'm provoked.
The expressions above do work differently in Perl.

1) caller side :

a) my $var = getRemoteUser();
sets a /scalar/ context for the call. Means that the caller expects a 
single value in return.

b) my @var = getRemoteUser();
sets a /list/ context for the call.  Indicates that the caller expects a 
list (an array) in return.

2) callee side :

a) return i++;
Returns the value of i prior to the post-increment, as a scalar value.
So it "fits" with 1a.

b) return (i++);
Returns a list composed of 1 element : the value of i before the 
post-increment.
So it "fits" with 1b.

But..
if you combine the call 1a
my $var = getRemoteUser();
with the version 2b : return (i++)
then when you get in $var is 1, always.

That is because since
my $var = getRemoteUser();
expects a scalar, but what it gets is a list, it does an implicit
my $var = (list), which equivalent to
my $var = scalar(list)
which returns the number of elements present in the array/list.

However, the calle sub can be cleverer and anticipate this, by doing :
return wantarray ? (i++) : i++;
thus checking in which context it is being called, and returning the 
appropriate form of response.

Perl is great !



---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message