Nicholas Wright
8/25/2006 7:58:00 PM
Chih-Chao Lam wrote:
> Apologies for a newbie ruby question:
>
> I know an asterisk can precede a parameter in the argument list of a
> method definition as in
>
> def varargs(arg1, *rest)
>
> But looking at the source code of Hpricot, I see that you can precede
> an asterisk before any variable. Is there a formal definition for the
> use of this operator?
>
> irb(main):001:0> *d = 3
> => [3]
> irb(main):002:0> d
> => [3]
> irb(main):003:0> d == [*d]
> => true
> irb(main):004:0> *d
> SyntaxError: compile error
> (irb):4: parse error, unexpected '\n', expecting '='
> from (irb):4
>
> Thanks,
> chao
* has a few different uses. When used like this:
def sum(*args)
args.inject(0) {|sum, i| sum + i}
end
sum(1, 23, 324, 3, 4543, 938, 9128, 42, 2134)
it's used to mean 'collect all passed arguments into an array'. When
used like this:
numbers = [1, 32, 32423, 32419879, 32517, 98172, 23478932]
sum(*numbers)
It means 'expand this list'. Which, in the above situation would
actually pass each number to sum as an individual argument, rather than
a single argument that is an array.
It has a few other usages, but they are all essentially variations on
the above two.
- Nick