ruby,字符串替换方法的目的

时间:2014-11-16 15:17:45

标签: ruby

来自[online ruby​​ documentation] [1]的字符串类的替换方法:

replace(other_str)→str 用other_str中的相应值替换str的内容和污点。

s = "hello"         #=> "hello"
s.replace "world"   #=> "world"

问题:

1)它是什么意思"污点"?
2)这种方法的目的是什么?为什么要使用它而不仅仅是s = "world"?我唯一的想法与指针有关,但我不知道如何在ruby中处理这个主题,如果是这样的话。

1 个答案:

答案 0 :(得分:3)

你说这与指针有关是正确的。 s = "world"将构造一个新对象并为s指定一个指向该对象的指针。而s.replace "world"修改s已指向的字符串对象。

replace会产生影响的一种情况是,无法直接访问变量:

class Foo
  attr_reader :x
  def initialize
    @x = ""
  end
end

foo = Foo.new

foo.x = "hello"       # this won't work. we have no way to assign a new pointer to @x
foo.x.replace "hello" # but this will

replace没有特别关注污染,文档只是声明它正确处理污染的字符串。解释该主题有更好的答案:What are the Ruby's Object#taint and Object#trust methods?