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工作正常,但#+=似乎完全被旁路.
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |