Отобразить массив объектов в виде таблицы
У меня есть массив объектов, как показано ниже:
Есть ли способ в Pharo отобразить массив в табличном формате?
| date | open | high | low | close |
|------------+------+------+-----+-------|
| 2018-12-28 | 10 | 20 | 30 | 40 |
| 2019-12-28 | 50 | 60 | 70 | 80 |
gtoolkit
В туре по gtoolkit есть слайд, в котором упоминается это:
Однако, похоже, мне придется определить специальную коллекцию для храненияCandle
объекты, а затем определитьgtViewCandlesOn
метод на нем, чтобы настроить, как будут отображаться свечи.
Просто интересно, есть ли подход, который будет работать с обычными массивами, или подход gtoolkit - это путь.
2 ответа
Это зависит от контекста использования. Вы можете использовать GToolkit, если вы используете его и в других действиях. GToolkit — это целая структура, и, вероятно, использовать ее только для этого табличного представления — излишество.
Во всяком случае, я сделал что-то подобное для интерфейса командной строки лаунчера Pharo, назвав егоConsoleListFormatter
. Его довольно просто использовать, вам нужно определить 2 метода в вашем классе свечи (#listPrintAttributeBlocks:
#listPrintAttributeLabels:
) и установите коллекцию Candles для экземпляра форматирования. Вызов printList сделает эту работу.
Вы можете использовать его здесь класс ConsoleListFormatter
Кроме того, если вы хотите печатать как коллекцию в инспекторе, вам нужно будет переопределить исходную реализацию (илиgtViewCandlesOn:
в случае использования метода GToolkit spector ) в классе Collection. Скорее я бы определил класс модели, например, который будет использовать экземпляр var с коллекцией свечей, тогда вы можете определить свой собственный#printOn:
наCandleList
не мешая реализации оригинальной коллекции.
Дайте мне знать, если вам нужна дополнительная информация!
Привет, Дэвид
Чтобы расширить инспектор, пожалуйста, проверьте
inspectorPresentationOrder:title:
Например:
AbstractFileReference >> #inspectionContents
<inspectorPresentationOrder: 0 title: 'Contents'>
| maxBytes buffer atEnd stringContents displayStream displayString |
maxBytes := 10000.
self binaryReadStreamDo: [ :stream |
buffer := stream next: maxBytes.
atEnd := stream atEnd ].
...
^ SpCodePresenter new
withoutSyntaxHighlight;
text: displayString;
whenSubmitDo: [ :text |
self writeStreamDo: [ :s | s nextPutAll: text string ] ];
yourself
Но чтобы активировать эту вкладку инспектора, у нас есть этот метод:
AbstractFileReference >> #inspectionContentsContext: aContext
aContext active: self isFile
Я приказываю сделать это в вашем проекте, вы можете добавить некоторые методы расширения для инспектора в классе Array и печатать все, что захотите, когда у вас есть специальный объект в вашем массиве.