Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby模拟“this”(从内部访问类实例)_Ruby_Oop - Fatal编程技术网

Ruby模拟“this”(从内部访问类实例)

Ruby模拟“this”(从内部访问类实例),ruby,oop,Ruby,Oop,在许多语言中,这一概念可从对象内部获得,例如类实例。考虑这个通用伪代码: class Foo { int x; constructor() { this.x = 10; } } 这里提供了从内部访问对象的功能。它可以在许多方面发挥作用 现在,我找不到如何从Ruby类内部访问它。我看到属性可以通过@prefix访问,方法可以通过名称访问,但这些只是实例的一部分,而不是实例本身。所以问题是:我们如何从对象内部访问完整的Ruby对象?您正在寻找的方法是sel

在许多语言中,这一概念可从对象内部获得,例如类实例。考虑这个通用伪代码:

class Foo {
    int x;

    constructor() {
        this.x = 10;
    }
}
这里提供了从内部访问对象的功能。它可以在许多方面发挥作用


现在,我找不到如何从Ruby类内部访问它。我看到属性可以通过@prefix访问,方法可以通过名称访问,但这些只是实例的一部分,而不是实例本身。所以问题是:我们如何从对象内部访问完整的Ruby对象?

您正在寻找的方法是self:


您正在寻找的方法是self:

在ruby中,应该使用self,而不是这个,这是等价的

现在,我们在实例和类方法之间有了区别

请参见示例:

class Person < ActiveRecord::Base
   def self.class_method_example
     return self
   end

   def instance_method_example
     return self
   end
end
在第二种情况下,我们只能使用Person实例调用该方法:

Person.first.instance_method_example  == Person.first # this returns true
更新 在第二个示例中,我假设ActiveRecord::Base的扩展使用ruby中的第一个方法,您应该使用self而不是这个,这是等效的

现在,我们在实例和类方法之间有了区别

请参见示例:

class Person < ActiveRecord::Base
   def self.class_method_example
     return self
   end

   def instance_method_example
     return self
   end
end
在第二种情况下,我们只能使用Person实例调用该方法:

Person.first.instance_method_example  == Person.first # this returns true
更新
在第二个示例中,我假设ActiveRecord::Base的扩展使用第一个方法

是的。我以为self是用于静态的东西,但不知道它对不同的调用意味着不同的东西self不用于静态的东西。事实上,Ruby中没有静态的东西。所有方法调用都是动态的,所有方法都是虚拟的。此外,self始终仅表示一件事:它是对当前对象的引用。对于不同的调用站点,它没有不同的含义。self不是一个方法。Objectself是该方法的许多建议名称之一,现在称为Objectself。self是一个关键字,表示某种特殊的变量。我不认为它有一个正式的名称。静态的意思是与一个类相关,而不是与一个特定的类实例相关是的。我以为self是用于静态的东西,但不知道它对不同的调用意味着不同的东西self不用于静态的东西。事实上,Ruby中没有静态的东西。所有方法调用都是动态的,所有方法都是虚拟的。此外,self始终仅表示一件事:它是对当前对象的引用。对于不同的调用站点,它没有不同的含义。self不是一个方法。Objectself是该方法的许多建议名称之一,现在称为Objectself。self是一个关键字,表示某种特殊的变量。我不认为它有正式名称。静态的意思是与一个类相关,而不是与一个特定的类实例相关。第二个示例并不完全可行,因为Person::first不是一个方法。另外,您的方法定义缺少def关键字。谢谢,我忘记了def。假设类扩展了ActiveRecord::Base,第一个是类方法,返回该类的第一个或N个firsts记录。第二个示例并不完全可行,因为Person::first不是方法。另外,您的方法定义缺少def关键字。谢谢,我忘记了def。假设类扩展了ActiveRecord::Base,第一个是类方法,返回该类的第一个或N个firsts记录。