Как переопределить печать массивов? - PullRequest
2 голосов
/ 06 марта 2019
printOn: aStream
    | normalized |
    normalized := self normalized.
    aStream nextPut: ${.
    self isEmpty ifFalse: [ 
        normalized printElem: 1 on: aStream.
        2 to: self size do: [ :i | 
            aStream nextPutAll: ' . '.
            normalized printElem: i on: aStream 
            ].
        ].
    aStream nextPut: $}

Этот метод printOn: работает, но Инспектор использует какой-то другой маршрут для печати массива.Как мне сказать Инспектору использовать вышеупомянутый метод для моего класса, который наследуется от Array?

1 Ответ

3 голосов
/ 06 марта 2019

Инспектор использует gtDisplayOn: для представления объектов.

В Object он реализован так:

gtDisplayOn: stream
    "This offers a means to customize how the object is shown in the inspector"
    ^ self printOn: stream

Однако Collection переопределяет его как:

gtDisplayOn: stream
    self printNameOn: stream.
    stream
        space;
        nextPut: $[;
        print: self size;
        nextPutAll: (' item' asPluralBasedOn: self size);
        nextPut: $];
        space.
    self size <= self gtCollectionSizeThreshold 
        ifTrue: [ self printElementsOn: stream ]

Просто переопределите его снова в своем классе, чтобы использовать printOn:, как Object.

...