title: What does mean both the operators * and (*) in ruby?
body: <p>I just introduced myself to the Ruby splat oprator. And I played with it lot's of way. but the below experiment somehow made me
  think about it twice :)</p>
  
  <pre><code>langs = ["java", "csharp", "ruby", "haskell" ]
  # =&gt; ["java", "csharp", "ruby", "haskell"]
  
   l1,*,l2 = *langs
  # =&gt; ["java", "csharp", "ruby", "haskell"]
   l1
  # =&gt; "java"
   l2
  # =&gt; "haskell"
  
   l1,*,*,l2 = *langs
  SyntaxError: (irb):27: syntax error, unexpected tSTAR
  l1,*,*,l2 = *langs
        ^
      from /usr/bin/irb:12:in `&lt;main&gt;'
  </code></pre>
  
  <p>Yes, the error is obvious, as I used more then 1 <code>*(splat)</code> operators in the same argument list.</p>
  
  <p>Now I tried to play with it.</p>
  
  <pre><code>l1,(*),(*),l2 = *langs
  # =&gt; ["java", "csharp", "ruby", "haskell"]
  </code></pre>
  
  <p>Ahh! here it works. But couldn't understand why so?</p>
  
  <pre><code> l1
  # =&gt; "java"
   l2
  # =&gt; "haskell"
   l1,(*),l2 = *langs
  # =&gt; ["java", "csharp", "ruby", "haskell"]
   l1
  # =&gt; "java"
   l2
  # =&gt; "ruby"
  </code></pre>
  
  <p>From the above example it seems that it is doing skipping of array elements.</p>
  
  <p><em><strong>Questions are :</em></strong></p>
  
  <ul>
  <li><p>(a) what the operator (*) is called?</p></li>
  <li><p>(b) when I used in splat(*) in the line <code>l1,*,l2 = *langs</code> it consumes all the elements - <code>"csharp", "ruby"</code>. Is there any way to see what <code>*</code> consumes there technically? Obviously I am teling with the use if <code>l1,*,l2 = *langs</code> not by <code>l1,l*,l2 = *langs</code>.</p></li>
  </ul>