如何将这个小代码放在一个类中?

时间:2014-09-27 16:25:23

标签: ruby self

我正在玩一些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"

如何围绕上面的代码包装类,并保留相同/类似的功能?

1 个答案:

答案 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解释说非常好。祝你好运。