2016-01-27 2 views
3

Я просто перехожу в ruby ​​2.3 с новым параметром frozen_string_literal.Как объявить изменяемую строку в ruby ​​2.3 && ruby ​​3

Над каждым из моего файла добавить следующую строку:

# frozen_string_literal: true

a = String('test') 
a.frozen?  # true 
a.gsub!('t', 'a') # raise error : OK 

Он работает хорошо, но есть способ объявить что-то вроде этого:

a = MutableString('test') 
a.frozen?  # true 
a.gsub!('t', 'a') # aesa 

В настоящее время I чтобы он работал следующим образом:

a = 'test'.dup 
a.frozen?  # false 
a.gsub!('t', 'a') # aesa 

Но это немного уродливо.

+0

вы имели в виду 'a.frozen? # false 'в последнем фрагменте? – steenslag

+0

Да, извините за ошибку. :) – Naremy

+1

Вы также имели в виду это во втором фрагменте? –

ответ

4

Элегантный способ достижения этого в будущих версиях Ruby - still being discussed. До тех пор, конечно, лучшим вариантом было бы избежать этого или действительно использовать String#dup явно.

Технически, однако, нет ничего, чтобы остановить вас от делать что-то вроде этого:

def MutableString(x) 
    x.dup 
end 

MutableString('...') 
Смежные вопросы