加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – Superclass mismatch,Struct,reloading and Spork

发布时间:2020-12-16 23:10:22 所属栏目:百科 来源:网络整理
导读:假设有以下课程 # derp.rbclass Derp Struct.new :idend 当我加载“./derp.rb”两次时程序失败并出现TypeError:类Derp的超类不匹配.好的,这可以通过require进行管理.但是如何使用Spork为每次测试重新加载这些类?要求显然不会工作因为它缓存加载的文件. 解
假设有以下课程
# derp.rb
class Derp < Struct.new :id
end

当我加载“./derp.rb”两次时程序失败并出现TypeError:类Derp的超类不匹配.好的,这可以通过require进行管理.但是如何使用Spork为每次测试重新加载这些类?要求显然不会工作因为它缓存加载的文件.

解决方法

Struct.new正在为您的每次加载创建新类.
irb(main):001:0> class Test1 < Struct.new :id; end
nil
irb(main):003:0> class Test1 < Struct.new :id; end
TypeError: superclass mismatch for class Test1
    from (irb):3
    from /usr/bin/irb:12:in `<main>'

您可以将Struct.new返回的类保存到变量中
可以使用,将始终是同一个类.

irb(main):004:0> Id = Struct.new :id
#<Class:0x00000002c35b20>
irb(main):005:0> class Test2 < Id; end
nil
irb(main):006:0> class Test2 < Id; end
nil

或者您可以使用Struct.new块样式而不是class关键字
只会发出警告:你已经初始化了常量Test3
重新加载您的文件.

irb(main):023:0> Test3 = Struct.new(:id) do
                     def my_methods
                     "this is a method"
                     end
                   end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读