在Metaprogramming Ruby中我看到了这段代码
class String
def to_alphanumeric
gsub /[^\w\s]/, ''
end
end
这里它添加了一个方法to_alphanumeric,它用空格替换标点符号到标准类String。让我感到困惑的是,既然我们没有指定gsub在哪个对象上运行,那么Ruby在这里如何知道我们实际上是指gsub在String obj本身上工作而不是其他什么?或者换一种说法,Ruby会自动将其重写为self.gsub吗?
答案 0 :(得分:7)
Ruby中的隐式接收器始终是self
(当然,self
在不同的上下文中是不同的。
Ruby不会“自动将其重写为self.gsub
”本身,因为调用带有显式self
接收器的私有方法会引发异常(和{{ 1}}无论如何都是一种公共方法。