Отобразить массив объектов в виде таблицы

У меня есть массив объектов, как показано ниже:

Есть ли способ в 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 и печатать все, что захотите, когда у вас есть специальный объект в вашем массиве.

Другие вопросы по тегам