От Ruby 2.5.1 двойният splat оператор (**options, например) все още е значително по-бавен от приемането на нормален аргумент и задава по подразбиране празен хеш.

Ето един прост показател:

require "benchmark/ips"

def option_hash(options = {}); end
def double_splat(**options); end

Benchmark.ips do |x|
  x.report("option_hash") { option_hash(foo: 1, bar: 2) }
  x.report("double_splat") { double_splat(foo: 1, bar: 2) }
end

... и резултат (по-голямото число е по-добро):

Warming up --------------------------------------
         option_hash   123.232k i/100ms
        double_splat    61.146k i/100ms
Calculating -------------------------------------
         option_hash      1.798M (± 3.6%) i/s -      8.996M in   5.011461s
        double_splat    708.545k (± 5.4%) i/s -      3.546M in   5.020927s

Каква е оптималната употреба на двоен сплат?

Трябва да използвате двоен знак в дефиницията на метода само ако този метод дефинира незадължителни аргументи.

# This is a valid use case since otherwise Ruby will set a hash
# in argument name `optional`.
def valid_use_of_double_splat(optional = nil, **options)
# Both of these use case can just use `options = {}` 
def perform_delivery(recipient:, **options)
def associate_user(user, **options)