В подклассе 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
работает правильно, но #+=
кажется полностью обойденным.