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记录。