Matz 决定在在Ruby3.0中默认冻结字符串,来提高程序的性能
为了有个过渡的过程,在Ruby2.3 增加了一个魔法注释
# frozen_string_literal: true
那这个有什么用呢?
我们应该知道 字符串有一个这样的方法就是
freeze, 它是我们主动用来冻结字符串
假设代码我们使用
#app.rb
#冻结该字符串
CON = "string".freeze
#判断该字符串时候被冻结
p CON.frozen?
#尝试修改
CON << "12"
puts CON
得出结果是:
》》 true
》》app.rb:10:in `': can't modify frozen String (RuntimeError)
得出的结果是我们无法修改被冻结的字符串
如果我们没有使用 freezen去冻结该字符串,就能去修改字符串,但是会提示而已
在Ruby2.3新加的这行注释 放在 文件的头部,它就会默认将字符串冻结
如
# frozen_string_literal: true
CON = "string"
#判断该字符串时候被冻结
p CON.frozen?
#尝试修改
CON << "12"
puts CON
得出和前面一样的结果是:
》》 true
》》 app.rb:7:in `': can't modify frozen String (RuntimeError)