Ruby中是否有方法引用类的当前实例,其方式是self
引用类本身?类似`self`的Ruby方法引用实例
回答
self
总是指一个实例,但一个类本身就是Class
的一个实例。在某些情况下,self
将涉及这样的实例。
class Hello
# We are inside the body of the class, so `self`
# refers to the current instance of `Class`
p self
def foo
# We are inside an instance method, so `self`
# refers to the current instance of `Hello`
return self
end
# This defines a class method, since `self` refers to `Hello`
def self.bar
return self
end
end
h = Hello.new
p h.foo
p Hello.bar
输出:
Hello
#<Hello:0x7ffa68338190>
Hello
不好意思选择这个,但是第一个'p self'实际上是在解析类定义的时候执行的。 'h = Hello.new'实际上会返回与'h.foo'相同的值。我提到这一点是为了防止列出的输出可能误导一些新的Rubyist。 – lilole
在类self
的实例方法是指该实例。要获得实例中的课程,您可以拨打self.class
。如果您在类方法中调用self
,您将获得该类。在类方法中,您无法访问该类的任何实例。
self
引用始终可用,它指向的对象取决于上下文。
class Example
self # refers to the Example class object
def instance_method
self # refers to the receiver of the :instance_method message
end
end
不要忘记类方法 – ahnbizcad
方法self
引用它所属的对象。类定义也是对象。
如果您在类定义中使用self
,它将引用类定义的对象(对类),如果您在类方法中调用它,它将再次引用该类。
但是在实例方法中,它指的是作为类实例的对象。
1.9.3p194 :145 > class A
1.9.3p194 :146?> puts "%s %s %s"%[self.__id__, self, self.class] #1
1.9.3p194 :147?> def my_instance_method
1.9.3p194 :148?> puts "%s %s %s"%[self.__id__, self, self.class] #2
1.9.3p194 :149?> end
1.9.3p194 :150?> def self.my_class_method
1.9.3p194 :151?> puts "%s %s %s"%[self.__id__, self, self.class] #3
1.9.3p194 :152?> end
1.9.3p194 :153?> end
85789490 A Class
=> nil
1.9.3p194 :154 > A.my_class_method #4
85789490 A Class
=> nil
1.9.3p194 :155 > a=A.new
=> #<A:0xacb348c>
1.9.3p194 :156 > a.my_instance_method #5
90544710 #<A:0xacb348c> A
=> nil
1.9.3p194 :157 >
您会看到在类声明期间执行的放置#1。它显示class A
是类型为id == 85789490的对象。所以在类声明自我中就是指类。
然后,当类方法被调用(#4)self
里面的类方法(#2)再次引用该类。
当调用一个实例方法(#5)时,它显示它内部(#3)self
引用该方法所连接的类实例的对象。
如果您需要引用实例方法中使用类self.class
可能是你需要:自己的方法?
1.itself => 1
'1'.itself => '1'
nil.itself => nil
希望这有助于!
- 1. 类方法中的Ruby实例引用?
- 2. 如何从ruby实例方法返回self的新实例
- 3. 在Python中使用“__init __(self)”方法获取类的实例
- 4. 来自实例方法的Ruby调用类方法
- 5. 从Ruby的类方法调用私有实例方法
- 6. 了解Ruby类VS实例方法
- 7. Ruby - 类实例变量getter setter方法
- 8. Ruby on Rails实例vs类方法
- 9. Ruby方法类似attr_reader
- 10. Ruby - 返回实例并修改该实例的类方法
- 11. 实例方法与类方法对于辅助类 - Ruby,Rails
- 12. 单例模块或类方法+类实例变量在Ruby中类似单例的行为?
- 13. 如何在单例类中使用“self”来访问实例方法?
- 14. self ::引用父类的静态方法中的派生类
- 15. 从实例方法实例化组合类Ruby
- 16. ruby方法应该修改类的实例方法吗?
- 17. 提供相同名称的类和实例方法的Ruby类
- 18. Ruby类似于Haskells循环的方法
- 19. Ruby:调用另一个类的实例方法
- 20. Ruby:类实例化的快捷方式
- 21. 尝试从ruby中的类方法返回类实例
- 22. 无法从共享方法中引用类的实例成员
- 23. 是一个对象(某个类的实例)的方法与Ruby中它的类的实例方法相同吗?
- 24. 参数到Ruby中的实例方法
- 25. Ruby字符串中的实例方法?
- 26. 呼叫实例方法与类的实例变量 - Ruby on Rails的
- 27. 确实Python有一个方法来实现类似C#索引?
- 28. Ruby:在实例和类方法中重用代码
- 29. Ruby机架调用:类vs实例方法?
- 30. 在类方法中使用实例变量 - Ruby
'self' * does *是指实例。你有一个具体的例子吗? –