Ruby 如何将这些小代码放入类中?
我在玩一些Ruby(1.9.3)代码,试图更好地理解“self”和OOP概念:Ruby 如何将这些小代码放入类中?,ruby,self,Ruby,Self,我在玩一些Ruby(1.9.3)代码,试图更好地理解“self”和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" 如何围绕上述代码包装一个类,并保留相同/相似的功能?我知道的最简单的方法是: class Stri
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"
如何围绕上述代码包装一个类,并保留相同/相似的功能?我知道的最简单的方法是:
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.
x=“一些文本”
类将不起作用,因为方法mycap仅适用于x。
我讨厌很多文章对“自我”的定义和使用方式不准确在Ruby应用程序运行期间,self仅更改2次:
a) 定义类时(对特定类或模块的自我更改)
b) 当您向外部接收器调用方法时(自身更改为该接收器)
在上面的第一个示例中,当您在“sometext”上调用mycap时,self将更改为“sometext”(这是String的一个实例)。在第二个示例中,self是x,它是对“sometext”的引用,是String的一个实例。大卫解释说:“就我个人而言,直到我看过《赛尔夫》之后,我才对自己有所了解。”。祝你好运。你不需要
self.
在self.capitalize
,因为self
是默认的接收者。这个人试图理解self,所以把它从例子中排除会让事情变得更复杂。然后解释一下,而不是建议那里需要self.
(但这是一个很好的答案)。我在哪里写的那个self是必需的?嗯,不完全是,因为你要么需要像SomeClass.new.mycap(“一些文本”)或者SomeClass.mycap(“一些文本”)这样的操作这并不完全是面向对象的。如果你想对一个对象做点什么,最好像第一个例子那样,让方法尽可能贴近对象。这就是为什么在Ruby中使用“some string”。大写而不是大写class.new.capitalize('some string'))