Question

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.

Was it helpful?

Solution

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. :-\

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top