Странная ошибка печати 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'"