Видите, у вас есть **options
в качестве аргумента, который не имеет значения по умолчанию, а первый аргумент имеет значение по умолчанию. Итак, поймите следующее регистр с одним аргументом ,
Всякий раз, когда передается один аргумент, его пытаются присвоить второму аргументу (так как первый содержит значение по умолчанию nil), и если он терпит неудачу из-за несоответствия типов, он назначается первому аргументу. Вот так my_method(4)
работает.
Теперь предположим, что у вас есть один аргумент, переданный в виде хэша, который соответствует присваиванию 2-му аргументу, затем, конечно, он присваивается второму аргументу, а first устанавливается по умолчанию nil.
Если вы хотите, чтобы это работало, то вы можете сделать следующее,
> my_method({sd: 4}, {})
=> [{:sd=>4}, {}]
Или вы можете указать имя аргумента при передаче,
> my_method(subject: {sd: 4})
=> [{:sd=>4}, {}]