Zeljko pretty much summed it up. I would just add that the new syntax is
limited to literal hashes with Symbol objects as keys. If you ever need to
write a literal hash with keys of any other object type (e.g. String) you
_must_ use the classic "rocket" style (using `=>`).
e.g.
{ :foo => "x", :bar => "y" }
could/should be written as
{ foo: "x", bar: "y" }
whereas the following can't be written any other way.
{ "foo" => "x", "bar" => "y" }
{ ["foo", "bar"] => "x" }
The main reason for the introduction of the new syntax, IIRC, is to make
the transition to true keyword arguments in Ruby 2.1 easier. This is also
the reason for leaving off the `{` and `}` of final hash arguments.[1]
In other words...
foo(1, bar: "x")
...defined as the following in Ruby 1.9...
def foo(a, options = {})
...could be refactored to the following in Ruby 2.0.
def foo(a, bar: "default")
Anyway, that's probably more than you wanted to know, but I thought I'd
share what I could remember about the history. :)
[1]: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/13635
On Mon, Oct 27, 2014 at 8:48 AM, Željko Filipin <[email protected]>
wrote:
> On Sat, Oct 25, 2014 at 6:37 AM, S Page <[email protected]> wrote:
>
>> E.g. https://github.com/cheezy/page-object/wiki/Elements has
>>
>> button(:your_name, :id => 'an_id')
>>
>> but our features/support/foo_page.rb files have e.g.
>>
>> h1(:first_heading, id: "firstHeading")
>>
>> is this Ruby strangeness, or just supporting alternative syntaxes?
>>
>
> `:id => 'an_id'` and `id: "firstHeading"` are Ruby hashes. The former is
> the Ruby 1.8 syntax (hash rocket), the latter is Ruby 1.9+ syntax.
>
> More information:
>
> https://github.com/bbatsov/ruby-style-guide#no-mixed-hash-syntaces
>
> RuboCop is instructed to allow both, at the moment. Example for Flow:
>
>
> https://github.com/wikimedia/mediawiki-extensions-Flow/blob/master/.rubocop_todo.yml#L61-L65
>
> Željko
>
> _______________________________________________
> QA mailing list
> [email protected]
> https://lists.wikimedia.org/mailman/listinfo/qa
>
>
--
Dan Duvall
Automation Engineer
Wikimedia Foundation <http://wikimediafoundation.org>
_______________________________________________
QA mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/qa