0
Кажется, нет никакой разницы между этими двумя выражениями.Есть ли разница без фигурных скобок при использовании хэша в качестве аргумента?
h = {a: 1, b: 2}
h.merge({c: 3, d: 4})
h.merge(c: 3, d: 4)
Есть проблемный случай, если я опустить фигурные скобки при использовании Hash
в качестве аргумента?
Вовсе нет, даже больше: принципы стиля Rubocop/Руби _suggest_ опустить Curlies вокруг хэша в таком случае. – mudasobwa
Чтобы опустить фигурные скобки, хэш-пары должны быть последними из аргументов. Например, 'def hi (a, b); puts "a = # {a}, b = # {b}"; конец; hi (3,: a => 1,: b => 2) # => a = 3, b = {: a => 1,: b => 2}; hi (: a => 1, 2) # => SyntaxError: (irb): 873: синтаксическая ошибка, неожиданная..'. –
Это хорошо объяснено в книге Фланагана и Мацумото (https://books.google.ca/books?id=jcUbTcr5XWwC&pg=PA189&lpg=PA189&dq=ruby+argument+hash+omit+braces&source=bl&ots=fJFmwe7zgC&sig=m0A-lKxFrSD6_ryrwPwdQ1hfwOU&hl = & ный са = Х & веды = 0ahUKEwj1wem2rZfLAhUKcj4KHdIcBdAQ6AEILzAD # v = OnePage & д = рубиновый% 20argument% 20hash% 20omit% 20braces & F = ложь). Одна вещь, о которой я не думал, заключается в том, что когда вы опускаете круглые скобки вокруг аргументов, фигурные скобки хеша * должны * быть опущены, чтобы Ruby не рассматривал хэш как блок. –