在ruby what';s self.method与类内方法的区别<&书信电报;自己 class-Foo def self.1;1端 类别[“二”,“一”]
我被告知上述方法“一”和“二”在概念上是不同的,但我不知道如何。在ruby what';s self.method与类内方法的区别<&书信电报;自己 class-Foo def self.1;1端 类别[“二”,“一”],ruby,Ruby,我被告知上述方法“一”和“二”在概念上是不同的,但我不知道如何。 它们都是单例方法-在概念和应用上有什么区别?在应用上没有区别。在概念上,区别是微妙的,但在第一种情况下,您在当前上下文中操作,并在另一个类实例上定义一个方法(实际上,在其特征类中定义一个实例方法),而在第二种情况下,您输入的是另一个类实例的元类(“特征类”)的上下文,然后定义一个实例方法 编辑: 我应该补充一点,选择类的原因我强烈建议您阅读“元编程Ruby”。 这本书解释了Ruby的对象模型,包括单例方法和单例类 本文也解释了同
它们都是单例方法-在概念和应用上有什么区别?在应用上没有区别。在概念上,区别是微妙的,但在第一种情况下,您在当前上下文中操作,并在另一个类实例上定义一个方法(实际上,在其特征类中定义一个实例方法),而在第二种情况下,您输入的是另一个类实例的元类(“特征类”)的上下文,然后定义一个实例方法 编辑:
我应该补充一点,选择
类的原因我强烈建议您阅读“元编程Ruby”。
这本书解释了Ruby的对象模型,包括单例方法和单例类
本文也解释了同样的主题
+1。模块功能如何?我也很想知道这两者之间的区别。实际上,我从你发送的链接中得到了我的代码片段,因为在那篇文章之后我仍然感到困惑。摘录“虽然一些面向对象语言的类结构既支持实例方法又支持类方法(有时称为静态方法),但Ruby只支持实例方法。如果Ruby只支持实例方法,那么您创建的所有类方法最终会出现在哪里?为什么,当然是单例类。”对我来说,这意味着self.method是相同的-即它们都是singletonsRuby只支持实例方法,但类也是类的实例。当您向一个实例(包括类实例,也就是说,一个类)添加方法时,您实际上是在将实例的类更改为一个新的匿名子类,然后向该子类添加一个新的实例方法。这个匿名子类经常被称为特征类。
class Foo
def self.one; 1 end
class << self
def two; 2 end
end
end
puts Foo.singleton_methods.inspect # => ["two", "one"]