序言: 我不是解决办法(第一点已经写过:没有,但也许可以在特殊情况下提供帮助)。
我的第一个想法是使用<代码> 冻结<>代码/代码>,以便找到解决办法:
a = "aa"
a.freeze
a << b #can t modify frozen string (RuntimeError)
现在我们必须重新界定<代码> 冻结<>>。
module FreezeWarning
def freeze
puts "#{self}: I am changed"
end
end
a = "aa"
a.extend(FreezeWarning)
a.freeze
a << b #aa: I am changed
第一期: 无法获得可变名称。
You may solve this with an additional variable (You can define your own variable identification, it must not be the name)
module FreezeWarning
def change_warning(name)
@varname = name
self.freeze
end
def freeze
puts "<#{@varname}> (#{self}): I am changed"
end
end
a = "aa"
a.extend(FreezeWarning)
a.change_warning( a )
a << b #<a> (aa): I am changed
但更大的问题: 这只具有价值的变化,而不是新的任务:
a = 5
a.freeze
a = 4
p a # -> 4
因此,这只是一个非常有限的解决办法。