ruby – Superclass mismatch,Struct,reloading and Spork

前端之家收集整理的这篇文章主要介绍了ruby – Superclass mismatch,Struct,reloading and Spork前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设有以下课程 @H_502_2@# derp.rb class Derp < Struct.new :id end

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

解决方法

Struct.new正在为您的每次加载创建新类. @H_502_2@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返回的类保存到变量中
可以使用,将始终是同一个类.

@H_502_2@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
重新加载您的文件.

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

猜你在找的Ruby相关文章