pl 方法修改了 x,这个是不太好吧。
x='213' def pl(x) # x = x.clone x.sub! '1', '2' end pl(x) p x #'223'
...把函数命名成 pl! 凑合一下吧。。。
pl!
pl x.freeze or pl x.dup
pl x.freeze
pl x.dup
sub()
建议楼主去搞个 RubyMine 来做 IDE。用很多语法的时候,直接可以跳到源码。多看下里面的注释和示例。。对新人来讲,强烈不建议直接从 sublime 甚至 vim 上手。
不想改的话为什么要用 sub!
#5 楼 @karmue 只是举个例。可以理解为笔误。 如果没什么办法的话,只好自己小心点了。很容易 bug。
两个方面吧, 1) pl 的实现有问题,行为和命名不符合通常约定 2) 不想遇到这种坑的话,也很简单,比如你确信这个字符串不需要被修改,那么把 x = '213' 改成 x = '213'.freeze,后面任何企图更改这个字符串的尝试都会触发一个 RuntimeError
x = '213'
x = '213'.freeze