Как стать автором
Обновить

Комментарии 9

НЛО прилетело и опубликовало эту надпись здесь
Конечно! :)
НЛО прилетело и опубликовало эту надпись здесь
Кстати, спасибо за инвайт!
плохой пример… матрица сама должна знать как тебя итерировать…
С точки зрения ООП, наверно, Вы правы, однако хотелось показать реализацию известной операции средствами Smalltalk в рамках одного метода. Не видел смысла усложнять.
в том-то и дело, что получился сложный для понимания код. 5 маленьких функций понять проще, чем одну большую

я бы предпочёл чот-то типа такого:

r forEachCell: [ :rCell |

rCell put: 0.

sRow:= self rowAt ( rCell get: row ).
rcColumn:= rcMatrix columnAt ( rCell get: column ).

sRow forEachCell: [ :sCell |

rcell add: sCell *( rcColumn cellAt: ( sCell get: column ) )

].

].
Все же видимо Вы имели ввиду:
sRow:= self rowAt ( rCell getRow)
и
rCell getСolumn
?
Увы тут не получится обойтись 5-ю маленькими методами. Необходимо будет как минимум:
— определить итератор по матрице (forEachCell);
— определить класс вектора, метод cellAt и итератор (forEachCell) для него;
— определить методы rowAt, columnAt для матрицы, возвращающие вектора;
— определить класс ячейки (Cell), для которой добавить аксессоры (put, add, getColumn, getRow)

Несколько много для простого примера, реализующего одну формулу:

для матриц с размерами m x n и p x q.
неа, тогда уж ( rCell row)

вектор — частный случай матрицы ;-)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации