Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does *:: (asterisk double colon) do in Ruby?

I was poking through the Rails code today and stumbled upon this snippet:

new_date(*::Date._parse(string, false).values_at(:year, :mon, :mday))

What does the asterisk-double-colon (or splat-double-colon if you will) in *::Date do?

Presumably it has something to do with the scope of a particularly-namespaced Date class... but it's necessary enough for the author to include it rather than just use the standard Date class.

like image 217
Craig Walker Avatar asked Jan 06 '13 23:01

Craig Walker


1 Answers

I was reading the code wrong; it's not a "*::" operator at all.

Here's what's happening:

  • Find the Date class in the global scope (::Date)
  • call _parse() to get a hash of values
  • call values_at to turn the hash into an array
  • use the asterisk operator in its typical function of turning an array into multiple arguments for a method call
  • call new_date(), passing the array elements in for its year, mon, and mday arguments.

The lack of space between the * and :: operators made it confusing. :-\

like image 115
Craig Walker Avatar answered Sep 23 '22 20:09

Craig Walker