Ask a Question related to Ruby, Design and Development.
-
Michael Garriss #1
order of evaluation for method arguments
Is this code guaranteed to always work this way:
a = [1,2,3,4,5]
--> [1, 2, 3, 4, 5]
def m( a, b, *c )
puts a, b, c
end
--> nil
m( a.shift, a.shift, a )
1
2
3
4
5
--> nil
I'm wondering (hoping) that the arguments will always be evaluated from
left to right as is the case above. Is this a 'ruby rule' or something
that could change?
TIA,
Michael
Michael Garriss Guest
-
Tab Order always greyed out, need to redefine order but can't
I had a check box but then i had to delete it and change it to a text field. now my tab order is all out of whack and I can't seem to set the tab... -
Web Method Order not changing
Hi All, I have created a Web Services with five web methods. When I browse it through the url : http://localhost/webservices/test/test.asmx it... -
The best overloaded method match ...' has some invalid arguments
Dear : I have a compilation error generated by this scenario: i have : 1. class Libray 2. Web Service 3. Web Application the web... -
Updating records in order (into an order)
I'm storing questions for a user-defined quiz. I can store them in the order they are entered without any problem. But... The user needs to have... -
Order of evaluation of expressions
Is this: @s = qw(a b); $z = shift(@s) . shift(@s); print $z; guaranteed to print "ab"? -
Tim Hunter #2
Re: order of evaluation for method arguments
On Sat, 13 Sep 2003 09:12:57 +0900, Michael Garriss wrote:
Maybe it's just my C background, but I've always felt like depending on> Is this code guaranteed to always work this way:
>
> a = [1,2,3,4,5]
> --> [1, 2, 3, 4, 5]
> def m( a, b, *c )
> puts a, b, c
> end
> --> nil
> m( a.shift, a.shift, a )
> 1
> 2
> 3
> 4
> 5
> --> nil
>
> I'm wondering (hoping) that the arguments will always be evaluated from
> left to right as is the case above. Is this a 'ruby rule' or something
> that could change?
>
> TIA,
> Michael
the order of operations like this is a code smell. I'm curious about why
you're "hoping" it works the way you've described?
Tim Hunter Guest
-
Michael Garriss #3
Re: order of evaluation for method arguments
Michael Garriss wrote:
Let me extend the question to include arrays (which might be related to> Is this code guaranteed to always work this way:
>
> a = [1,2,3,4,5]
> --> [1, 2, 3, 4, 5]
> def m( a, b, *c )
> puts a, b, c
> end
> --> nil
> m( a.shift, a.shift, a )
> 1
> 2
> 3
> 4
> 5
> --> nil
>
> I'm wondering (hoping) that the arguments will always be evaluated
> from left to right as is the case above. Is this a 'ruby rule' or
> something that could change?
>
arguments, I don't know, I've never looked at the ruby source):
a = [1,2,3,4,5]
--> [1, 2, 3, 4, 5]
b = [a.shift,a.shift,a.shift,a.shift,a.shift]
--> [1, 2, 3, 4, 5]
Michael
Michael Garriss Guest
-
Yukihiro Matsumoto #4
Re: order of evaluation for method arguments
Hi,
In message "Re: order of evaluation for method arguments"
on 03/09/13, Michael Garriss <mgarriss@earthlink.net> writes:
|> I'm wondering (hoping) that the arguments will always be evaluated
|> from left to right as is the case above. Is this a 'ruby rule' or
|> something that could change?
|
|Let me extend the question to include arrays (which might be related to
|arguments, I don't know, I've never looked at the ruby source):
It's left to right. But I don't encourage you to depend on it.
matz.
Yukihiro Matsumoto Guest
-
daz #5
Re: order of evaluation for method arguments
"Michael Garriss" <mgarriss@earthlink.net> wrote:
From Pickaxe:> Michael Garriss wrote:
>> > Is this code guaranteed to always work this way:
> >
> > a = [1,2,3,4,5]
> > --> [1, 2, 3, 4, 5]
> > def m( a, b, *c )
> > puts a, b, c
> > end
> > --> nil
> > m( a.shift, a.shift, a )
> > 1
> > 2
> > 3
> > 4
> > 5
> > --> nil
> >
> > I'm wondering (hoping) that the arguments will always be evaluated
> > from left to right as is the case above. Is this a 'ruby rule' or
> > something that could change?
> >
The Ruby Language
Method Definition
Method Arguments
(I can't find this section on rubycentral/book to link to)
"The expressions are evaluated from left to right.
An expression may reference a parameter that precedes it
in the argument list."
#--------------------
a = [1,2,3,4,5]
def m( a, b, *c )
p a, b, c
end
m( a.shift, b=a, a )
#--------------------
#-> 1
#-> [2, 3, 4, 5]
#-> [[2, 3, 4, 5]]
So that's as safe as Pickaxe.
Well, since:>
> Let me extend the question to include arrays (which might
> be related to arguments, I don't know, I've never looked
> at the ruby source):
>
> a = [1,2,3,4,5]
> --> [1, 2, 3, 4, 5]
> b = [a.shift,a.shift,a.shift,a.shift,a.shift]
> --> [1, 2, 3, 4, 5]
>
a, b = b, a
is 'defined' (in the sense that it's a ruby idiom),
your example works the way I'd expect, even though
Matz has guarded his options. Perhaps he means that
this could look like a prime candidate for optimization
which would give [1, 1, 1, 1, 1] but I don't know if
anyone would like to see that happen.
>
> Michael
>
daz
daz Guest
-
ts #6
Re: order of evaluation for method arguments
>>>>> "d" == daz <dooby@d10.karoo.co.uk> writes:
d> "Michael Garriss" <mgarriss@earthlink.net> wrote:
--> [1, 2, 3, 4, 5]>> a = [1,2,3,4,5]--> [1, 2, 3, 4, 5]>> b = [a.shift,a.shift,a.shift,a.shift,a.shift]d> Well, since:>>
d> a, b = b, a
d> is 'defined' (in the sense that it's a ruby idiom),
d> your example works the way I'd expect, even though
d> Matz has guarded his options.
I don't see the relation between the two.
The first modify `a' in the RHS, the second not.
Perhaps, it can exist a version of ruby which give
b = [5, 4, 3, 2, 1]
and where
a, b = b, a
still work
Guy Decoux
ts Guest
-
daz #7
Re: order of evaluation for method arguments
"ts" <decoux@moulon.inra.fr> wrote:
>> >>>>> "d" == daz <dooby@d10.karoo.co.uk> writes:
> d> "Michael Garriss" <mgarriss@earthlink.net> wrote:
>> --> [1, 2, 3, 4, 5]> >> a = [1,2,3,4,5]> --> [1, 2, 3, 4, 5]> >> b = [a.shift,a.shift,a.shift,a.shift,a.shift]>> >>
> d> Well, since:
>
> d> a, b = b, a
>
> d> is 'defined' (in the sense that it's a ruby idiom),
> d> your example works the way I'd expect, even though
> d> Matz has guarded his options.
>
> I don't see the relation between the two.
>
> The first modify `a' in the RHS, the second not.
>
> Perhaps, it can exist a version of ruby which give
>
> b = [5, 4, 3, 2, 1]
>
> and where
>
> a, b = b, a
>
> still work
>
>
> Guy Decoux
>
>
I defer, of course ;)
I was merely trying to convey that Ruby evaluates all
RHS (in sequence) before assigning to LHS and it's
no accident (indeed sensible) that:
r = [1,2,3]
a, b = r.shift, r.shift
p [a, b]
#-> [1, 2]
daz
daz Guest



Reply With Quote

