Cla*_*diu 470 ruby inheritance introspection
有什么不同?我什么时候应该使用哪个?为什么会有这么多?
sep*_*p2k 602
kind_of?并且is_a?是同义词.instance_of?与其他两个不同之处在于,只有true当对象是该确切类的实例而不是子类时,它才会返回.
示例:"hello".is_a? Object并"hello".kind_of? Object返回true因为"hello"是a String并且String是其子类Object.然而"hello".instance_of? Object回报false.
Jör*_*tag 21
有什么不同?
从文档:
- - (布尔)
instance_of?(class)- 返回
trueifobj是给定类的实例.
和:
- - (布尔)
is_a?(class)
- (布尔)kind_of?(class)- 返回
trueifclass是类的类obj,或者是否class是obj包含在其中的超类或模块之一obj.
如果不清楚,最好知道究竟是什么不清楚,以便可以改进文档.
我什么时候应该使用哪个?
决不.请改用多态.
为什么会有这么多?
我不打电话给两个 "很多".有两个,因为他们做了两件不同的事情.
小智 6
使用时,询问对象是否响应您需要或不需要的方法更像Ruby respond_to?.这允许最小的接口和实现不知道的编程.
当然,它并不总是适用,因此仍然有可能使用您所询问的方法询问对"类型"(类或基类)的更保守的理解.
我也不会调用两个 Many (is_a?和kind_of?是同一方法的别名),但如果您想看到更多可能性,请将注意力转向#class方法:
A = Class.new
B = Class.new A
a, b = A.new, B.new
b.class < A # true - means that b.class is a subclass of A
a.class < B # false - means that a.class is not a subclass of A
# Another possibility: Use #ancestors
b.class.ancestors.include? A # true - means that b.class has A among its ancestors
a.class.ancestors.include? B # false - means that B is not an ancestor of a.class
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
178573 次 |
| 最近记录: |