在Ruby中覆盖实例变量数组的运算符

3 ruby operator-overloading operators

抱歉这个糟糕的头衔,我真的不知道怎么称呼这个.

我在Ruby中有这样的东西:

class Test
  def initialize
    @my_array = []
  end
  attr_accessor :my_array
end
test = Test.new
test.my_array << "Hello, World!"
Run Code Online (Sandbox Code Playgroud)

对于@my_array实例变量,我想覆盖<<运算符,以便我可以先处理插入到它的任何内容.我@my_array.<<(value)在课堂上尝试过这种方法,但它没有用.

gle*_*ald 10

我想你正在寻找这个:

class Test
  def initialize
    @myarray = []
    class << @myarray
      def <<(val)
        puts "adding #{val}" # or whatever it is you want to do first
        super(val)
      end
    end
  end
  attr_accessor :myarray
end
Run Code Online (Sandbox Code Playgroud)

理解Ruby Singleton类中有一篇关于这个和相关主题的好文章.