2013-03-23 72 views
0

在Ruby的元編程我看到這個代碼如何理解ruby中的代碼片?

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

這增加了一個方法to_alphanumeric,其替代標點符號與空格,以標準的String類。令我困惑的是,因爲我們沒有指定哪個對象是gsub的,所以Ruby在這裏如何知道我們實際上是指gsub在String obj本身而不是其他東西?或者換一種說法,Ruby會自動將它重寫爲self.gsub嗎?

+0

父母和家長和父母等,找到一種方法 – Davit 2013-03-23 20:57:04

回答

7

Ruby中的隱式接收器始終是self(當然,self在不同的上下文中是不同的)。

Ruby沒有「自動改寫爲self.gsub本身,因爲調用有一個明確的self接收機的私有方法會引發異常(和gsub這裏是一個公共的方法呢)。

+0

我感到困惑。 gsub默認是私人的,那你爲什麼說它是「這裏公開的」? – OneZero 2013-03-23 21:39:33