如何获取Ruby子类常量数组中与父类不相同的元素
解决方案
你可以直接利用Ruby数组的差集运算符-实现需求,代码如下:
Child::COLUMNS - Parent::COLUMNS
原理解释
- Ruby 数组的
-方法会返回新数组,仅保留原数组中不存在于参数数组里的元素 - Ruby 中两个哈希对象只要所有键值对完全匹配,相等判断就会返回
true,刚好适配当前场景的元素比较逻辑
通用封装方案
如果需要在多个继承自Parent的子类中复用这个逻辑,可以把方法封装到父类中,同时使用const_get的第二个参数关闭继承链查找,避免子类未定义COLUMNS时出现异常:
class Parent COLUMNS = [ { column: 'type', type: 'String' } ] # 获取当前子类COLUMNS与父类COLUMNS的差集 def self.unique_columns self.const_get(:COLUMNS, false) - Parent::COLUMNS end end class Child < Parent COLUMNS = [ { column: 'type', type: 'String' }, { column: 'user', type: 'String' }, { column: 'password', type: 'String' } ] end # 调用方法直接得到结果 Child.unique_columns
内容的提问来源于stack exchange,提问作者Tilipim
相关产品推荐
相关产品推荐

