gpt4 book ai didi

ruby - 为什么会.is_a?和 .class 给出相互矛盾的结果?

转载 作者:数据小太阳 更新时间:2023-10-29 07:06:49 25 4
gpt4 key购买 nike

我有三个属于同一个类的对象。一个是通过 Item.new 创建的,另外两个是从数据库 (Mongoid) 中提取的。我将这些对象中的一个/任何一个传递给另一个方法,并通过 is_a? 检查该方法中的类型:

def initialize (item, attrs = nil, options = nil)
super(attrs, options)
raise 'invalid item object' unless item.is_a?(Item)

好吧,这次加薪被击中了。所以我在 Rails 控制台中检查类、is_a 和 instance_of。我得到相互矛盾的结果。为什么它们有相同的 class 但只有其中一个是那个 classinstance_of

>> i0.is_a? Item
=> false
>> i1.is_a? Item
=> false
>> i2.is_a? Item
=> true

>> i0.class
=> Item
>> i1.class
=> Item
>> i2.class
=> Item

>> i0.instance_of?(Item)
=> false
>> i1.instance_of?(Item)
=> false
>> i2.instance_of?(Item)
=> true

是否有更好的方法来对我的输入进行这种类型检查?为什么同一个类的三个事物不都是该类的实例?

最佳答案

我不知道 Mongoid,但通常,在数据库访问库中,您不会从数据库中获取实际对象,而是作为存储在数据库中的对象的代理对象.由于 Ruby 缺乏实现完美透明代理的功能,您有时会看到奇怪的结果,尤其是在使用反射或围绕对象标识时。

关于ruby - 为什么会.is_a?和 .class 给出相互矛盾的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9163862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com