Если переданный аргумент number
уже является замороженной строкой для начала, то number = number.to_s
ничего не изменит и вы не сможете изменить ее на месте (с number.insert
):
add_zeros("24".freeze, 10) # => TypeError: can't modify frozen string
Создание новой строки из нее ("0#{number}"
), конечно, не проблема.
Причина, по которой ваша строка заморожена, неуловима. Когда вы используете строку в качестве хеш-ключа, Ruby сделает ее копию и заморозит:
s = "hello"
h = {}
h[s] = :world
key = h.keys.first
key.equal?(s) # => false (Ruby made a copy)
key.frozen? # => true (Ruby automatically freezes the copy)
В любом случае, как правило, метод не должен изменять свои аргументы.
В этом случае вы, вероятно, захотите использовать rjust
:
24.to_s.rjust(10, "0") # => "0000000024"