Это просто аргумент ключевого слова с пустым хешем в качестве значения по умолчанию:
def initialize(arg: {})
arg
end
irb(main):011:0> initialize().class
=> Hash
Хотя это действительно странно и недиоматично. До того, как в Ruby 2.0 была введена первоклассная поддержка ключевых слов, вы объявили метод, который принимает необязательный хэш опций:
def initialize(hash = {})
end
Этот аргумент должен был находиться в конце списка. Имя не имеет значения.
В Ruby 2.0 вы можете объявить метод, который принимает любое количество ключевых слов с двойным восклицательным знаком:
def initialize(**other_keyword_args)
end
Вы можете комбинировать его с аргументами позиционного и именованного ключевых слов. а также:
def initialize(a, b = 2, foo:, bar: 2, **other_keyword_args)
end
Использование initialize(arg: {}, ...)
будет иметь смысл, если там, где больше параметров, и этот принимает хеш, но сам по себе это просто странно.