如何理解ruby中的这段代码?

时间:2013-03-23 20:55:35

标签: ruby

在Metaprogramming Ruby中我看到了这段代码

class String
  def to_alphanumeric
    gsub /[^\w\s]/, ''
  end
end

这里它添加了一个方法to_alphanumeric,它用空格替换标点符号到标准类String。让我感到困惑的是,既然我们没有指定gsub在哪个对象上运行,那么Ruby在这里如何知道我们实际上是指gsub在String obj本身上工作而不是其他什么?或者换一种说法,Ruby会自动将其重写为self.gsub吗?

1 个答案:

答案 0 :(得分:7)

Ruby中的隐式接收器始终是self(当然,self在不同的上下文中是不同的。

Ruby不会“自动将其重写为self.gsub本身,因为调用带有显式self接收器的私有方法会引发异常(和{{ 1}}无论如何都是一种公共方法。