试图在Array子类中重新定义+ =似乎没有做任何事情?

时间:2011-10-10 06:45:07

标签: ruby arrays concat

在一个Array子类中(只是一个执行某些输入值强制的数组)我已经定义#concat以确保强制值。由于没有人使用#concat并且更有可能使用#+=我尝试将#+=别名为#concat,但似乎永远不会被调用。有什么想法吗?

请注意,强制实际上总是对特定超类的对象(通过构造函数接受输入),以防这个代码看起来不像我描述的那样。它是内部私有API的一部分。

  class CoercedArray < Array
    def initialize(type)
      super()
      @type = type
    end

    def push(object)
      object = @type.new(object) unless object.kind_of?(@type)
      super
    end

    def <<(object)
      push(object)
    end

    def concat(other)
      raise ArgumentError, "Cannot append #{other.class} to #{self.class}<#{@type}>" unless other.kind_of?(Array)
      super(other.inject(CoercedArray.new(@type)) { |ary, v| ary.push(v) })
    end

    alias :"+=" :concat
  end

#concat工作正常,但#+=似乎完全被旁路。

1 个答案:

答案 0 :(得分:5)

由于a += ba = a + b的语法糖,我试图覆盖+方法。