繁体   English   中英

在Ruby中使用模块扩展对象时的奇怪行为

[英]Odd behaviour when extending an object with a module in ruby

如果我执行以下操作:

user = User.new
user.extend Customer
user.is_a? Customer == true

它工作正常。

但是,如果我执行以下操作(其中Profile是一个mongoid模型,并且嵌入了用户):

profile = Profile.all.first
profile.user.extend Customer
profile.user.is_a? Customer == false

用户不再是客户。 一定有一个简单的原因,但我看不到。

编辑:用户和配置文件是mongoid模型,即。 profile.user.class =用户和profile.class =配置文件。

我的猜测:每次调用profile.user都会得到一个新对象。 尝试:

2.times{ p profiler.user.object_id }

看看会发生什么。 然后尝试:

u = profile.user
u.extend Customer
p u.is_a? Customer
p profile.user.is_a? Customer

看看你得到什么输出。

这实际上最终是Mongoid中的错误。 这是描述问题: https : //github.com/mongoid/mongoid/issues/1933

现在已在最新提交中修复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM