2014-09-27 79 views
0

我與一些紅寶石(1.9.3)的代碼打,試圖瞭解「自我」和麪向對象的概念更好:如何把這個小代碼放在一個類中?

publiC#without 'public', code works only from irb, not when you save script! (why?) 
def mycap 
    self.capitalize 
end 
x = "some text" 
x.mycap 
#=> "Some text" 

如何包裝類各地上面的代碼,並保持相同/相似的功能?

回答

1

我所知道的最簡單方法是:

class String 
    def mycap 
    self.capitalize 
    end 
end 

p "some text".mycap 

或可能:

x = "some text" 
class << x 
    def mycap 
    self.capitalize 
    end 
end 

p x.mycap 
p 'some text'.mycap #=> won't work, because the method mycap is only for x. 

我恨它,許多文章包含的「自我」和如何使用它的準確定義。在您的Ruby應用運行時,'self'只會改變2次:

a)當您定義一個類(自我更改爲該特定類或模塊) b)當您調用外部方法接收器(個體變化到接收器)

在上面的第一個例子中,當調用mycap上的「一些文本」,自變爲「一些文本」(這是字符串的一個實例)。在第二個示例中,self是x,它是對「某些文本」的引用,它是String的一個實例。就我個人而言,直到我看過these videos by Pragmatic Programmer,我才知道自己的情況,David解釋得很好。祝你好運。

+0

你不'self.capitalize'需要'self.',爲'self'是默認的接收器。 – 2014-09-27 16:37:42

+0

這個人試圖去理解自我,所以排除這個例子會讓事情變得更加複雜。 – daremkd 2014-09-27 16:39:08

+0

然後解釋一下,而不是建議那裏需要'self.'(但它是一個很好的答案)。 – 2014-09-27 16:41:00

相關問題