Ruby

Rubyで単純なQueueクラスを使いたい

グラフアルゴリズムを使ったプログラムを書く時、Queueという名前と機能を使ったソースを書きたい

しかし、それには2つ問題がある

  • 一般的なQueueのプログラムでの挙動は Arrayの #push #shift で実装されているので、Queueクラスは作る必要がない
  • Queueというクラス名はスレッドプログラミング用のThread::Queueというクラスに使われている

というわけで、単純にaliasを使うことにする。

# enqueue = 後入れ、 dequeue = 先出し
class Array
  alias_method :enqueue, :push
  alias_method :dequeue, :shift
end

queue = [1,2,3]

puts "original !"
puts queue.to_s

puts "enqueue! 4"
#queue.push(4)
queue.enqueue(4)
puts queue.to_s

puts "dequeue! 1"
#queue.shift
queue.dequeue
puts queue.to_s

出力

ruby test.rb
original !
[1, 2, 3]
enqueue! 4
[1, 2, 3, 4]
dequeue! 1
[2, 3, 4]

Stackについても同様な実装ができそうだ