[ruby] переопределить конструктор наследника стандартного кл
От: DemAS http://demas.me
Дата: 16.09.09 06:12
Оценка:
Есть класс — наследник Array; хочется переопределить его конструктор,
добавив туда один параметр, но так, чтобы не потерять все возможности
инициализации от стандартного класса.

То есть, сейчас примерно так:

class Array2D < Array
  def set_x(x)
    @x = x
  end
  def [] (x, y)
    return super(y * @x + x)
  end  
end

a = Array2D.new(10) { |i| i }
a.set_x(2)
puts a[1, 1]


@x — размерность массива по горизонтали.

Хочется передавать это значение не через вызов отдельного метода set_x(), а
в конструкторе.

Что-то там:

def initialize(......, x)
    super(.....)
    @x = x
end


Как это можно сделать ?
Posted via RSDN NNTP Server 2.1 beta
Re: [ruby] переопределить конструктор наследника стандартног
От: Гест Украина https://zverok.github.io
Дата: 16.09.09 06:50
Оценка: 2 (1)
Здравствуйте, DemAS, Вы писали:


DAS>Что-то там:


DAS>
DAS>def initialize(......, x)
DAS>    super(.....)
DAS>    @x = x
DAS>end
DAS>


DAS>Как это можно сделать ?


Например, так:
def initialize(*arg, &block)
  @x = arg.pop
  super(*arg, &block)
end


(но вообще-то, принципы объектно-ориентированного дизайна кагбэ намекают нам, что двухмерный массив — вряд ли наследник массива одномерного; а документация стандартной библиотеки кагбэ намекает нам на наличие класса Matrix)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.