Странная ошибка печати Smalltalk

Чтобы "набить" число, которое я печатаю, чтобы оно всегда было фиксированным числом символов, я делаю строку дополнения, основанную на количестве целых чисел и заданном числе:

pad := '    '.
(freqVal < 10) ifTrue: [ pad := '   ' ].
((freqVal < 100) & (freqVal > 9)) ifTrue: [ pad := '  ' ].
((freqVal < 1000) & (freqVal > 99)) ifTrue: [ pad := ' ' ].
stdout<<pad<<freqVal<<<<nl

Тем не менее, напечатанный результат всегда делает переменную pad в букву вместо пробелов, как я присваиваю его значение. Если я добавлю pad displayNl перед последней строкой он печатает букву по какой-то причине, а не просто пробелы.

Есть идеи, почему это может происходить?

1 ответ

Я не знаю Gnu-Smalltalk в частности. Конечно, есть несколько удобных методов или форматеров String, которые вы можете использовать для этой цели. Мой совет - сначала преобразовать число в строку, а затем отформатировать его с помощью пробела. Таким образом вы избежите проблем с преобразованием типов.

новый метод String (желательно существующий в вашем дистрибутиве ST):

withLeading: aCharacter size: anInteger
   (anInteger < self size) ifTrue: [^self copyFrom: 1 to: anInteger].
   ^((self species new: anInteger - self size) atAllPut: aCharacter ), self

пример использования

9 asString withLeading: ($ ) size: 10           "result '         9'"
10 asString withLeading: ($ ) size: 10          "result '        10'"
999 asString withLeading: ($ ) size: 10         "result '       999'"
Другие вопросы по тегам