这是一个红宝石虫吗?
target_url_to_edit = target_url
if target_url_to_edit.include?("http://")
target_url_to_edit["http://"] = ""
end
logger.debug "target url is now #{target_url}"
Run Code Online (Sandbox Code Playgroud)
这将返回不带http://的target_url
hur*_*n77 10
您需要复制内存中对象,因为变量名只是对内存中对象的引用:
target_url_to_edit = target_url.dup
Run Code Online (Sandbox Code Playgroud)
现在target_url_to_edit为其分配原始对象的新副本.
对于您的情况,此代码可能只在一行中执行相同操作(无重复,否则如果):
target_url_to_edit = target_url.sub(%r{^http://}, "")
Run Code Online (Sandbox Code Playgroud)
不,这不是Ruby中的错误,这就是共享可变状态的工作原理,不仅仅是在Ruby中,而是在任何编程语言中.
想一想:我的妈妈称我为"儿子",我的朋友称我为"Jörg".如果我剪了头发,那么你用哪个名字来引用我并不重要:我是同一个人,无论你是叫"儿子"还是"Jörg"或"Mittag先生"还是"嘿, douchebag",因此我的头发总是很短.如果你用不同的名字给我打电话,它就不会神奇地重新成长.
您的代码中也会发生同样的事情:您通过两个不同的名称引用字符串,但使用哪个名称并不重要; 如果字符串发生变化,则会发生变化.
当然,解决方案是不共享可变状态而不是改变共享状态,就像在@hurikhan77的回答中一样.
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |