Небольшое исследование кодирования работы оператора splat:
def foo(*keys)
puts keys.inspect
end
>> foo("hi", "there")
["hi", "there"]
>> foo(["hi", "there"])
[["hi", "there"]]
>> foo(*["hi", "there"])
["hi", "there"]
Таким образом, передача в обычный массив приведет к тому, что этот массив будет оцениваться как один элемент, так что вы получите массив внутри массива в вашем методе. Если вы предваряете массив * при вызове метода:
$redis.del(*keys)
Это позволяет методу знать распаковать его / не принимать никаких дальнейших аргументов. Так что это должно решить вашу проблему!
Просто для дальнейшего уточнения, это работает:
>> foo("hello", *["hi", "there"])
Это вызывает синтаксическую ошибку:
>> foo("hello", *["hi", "there"], "world")