1

から継承する Grid クラスに取り組んでいMatrixます:

class Grid < Matrix
  def self.[](x,y=x)
    if x.is_a? String
      ary = x.lines.map { |l| l.strip.split('|') }.map.with_index do |col,x|
        col.map.with_index { |cell,y| ::Cell.new x: x, y: y, alive: !!(cell =~ /O/i) }
      end
      super *ary
    else
      super *Array.new(y) { [::Cell.new(x: x, y: y, alive: [true,false].sample)] * x }
    end
  end
end

::initializeプライベートなので上書きできないようです。上記は機能しますがMatrix、カスタムクラスではなくクラスのインスタンスを生成するため、行き詰まっています。何かを呼び出しto_sたり受け取ったりするときに、クラスがインスタンス化されていないことに"Matrix[[X,O],[O,O]]"気付きました。私は何が欠けていますか?

4

1 に答える 1

0

::newRubyにはメソッドがありません。#initialize

super を呼び出すMatrix::[]と、提供された引数で呼び出されます。

ソースコードを見てください:

def Matrix.[](*rows)
  Matrix.rows(rows, false)
end

Grid::rows代わりに、ロジックで定義してみることができます。または単にオーバーライドする#initialize


ちなみに、これはよく書かれていませんが、rows(rows,false)この問題を防ぐために (マトリックスなしで) 行うべきでした。

于 2013-03-04T20:20:45.790 に答える