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

d11*_*wtq 1 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
Run Code Online (Sandbox Code Playgroud)

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

Mic*_*ohl 5

既然a += b是语法糖,a = a + b我会尝试覆盖这个+方法.