super.apply(this, arguments)

Chris Pine chrispi at opera.com
Wed Jan 2 04:16:23 PST 2008


Nathan de Vries wrote:
> Sounds similar to the splat operator of Ruby:
> 
>      def foo(first, second, *rest)
>        puts first, second, rest.inspect
>      end
> 
>      foo(1,2)
>      => 1 2 []
> 
>      foo(1,2,3,4,5)
>      => 1 2 [3, 4, 5]
> 
>      rest = [3,4,5]
>      foo(1,2, *rest)
>      => 1 2 [3, 4, 5]
> 
>      rest = [3,4,5]
>      foo(1,2, rest)
>      => 1 2 [[3, 4, 5]]

Right, as well as:

   rest = [1,2,3,4,5]
   foo(*rest)
   => 1 2 [3, 4, 5]
   all = [0, *rest]
   => [0, 1, 2, 3, 4, 5]

and...
   irb(main):001:0> a = [1,2,3]
   => [1, 2, 3]
   irb(main):002:0> b,*c = a
   => [1, 2, 3]
   irb(main):003:0> b
   => 1
   irb(main):004:0> c
   => [2, 3]
   irb(main):005:0> case 2
   irb(main):006:1> when 0,*a
   irb(main):007:1>   puts 'yep'
   irb(main):008:1> end
   yep
   => nil

The splat operator splats into argument lists, array literals, etc.  It 
also collects over parameter lists, multiple assignment, cases... I 
think just about anywhere where ExpressionList is valid.  (I'm not sure 
we want to go that far... just saying.)

Chris



More information about the Es4-discuss mailing list