我正在玩一些Ruby(1.9.3)代码,试图更好地理解“自我”和OOP概念:
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"
如何围绕上面的代码包装类,并保留相同/类似的功能?
答案 0 :(得分: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.
我讨厌许多文章包含对“自我”的不准确定义。以及它是如何使用的。 &#39;自&#39;在Ruby应用程序的运行时间内只更改了2次:
a)定义类时(对该特定类或模块的自我更改) b)当您将方法调用到外部接收器时(自我更改为该接收器)
在上面的第一个例子中,当您在&#34;某些文字&#34;上调用mycap时,自我更改为&#34;某些文字&#34; (这是String的一个实例)。在第二个例子中,self是x,它是对某些文本&#39;的引用,它是String的一个实例。就个人而言,在我看到these videos by Pragmatic Programmer之前,我并没有对自己有任何线索,David解释说非常好。祝你好运。