2009-10-29 2 views
2

У меня возникли проблемы с вставкой вкладки между двумя строками.Smalltalk - Вставка символа TAB (Visual Works)

stringOne := 'Name'. 
stringTwo := 'Address'. 

Я пробовал:

info := stringOne, String tab, stringTwo. 

или

info := stringOne, Character tab asString, stringTwo. 

Но ни один из этих двух сообщений не будут поняты. Я использую Visual Works.

ответ

2

У меня нет Visual Works для проверки, но в IBM Smalltalk Tab (обратите внимание на случай) является символом табуляции.
Может попробовать это:

info := stringOne, Tab asString, stringTwo. 

редактирования (Re: Ваш комментарий):

Хорошо, либо Tab не правильное имя для символа табуляции, или ваш класс персонажа не отвечает to asString
Попробуйте посмотреть, что дает Tab class, если он отвечает «Символ», вам просто нужно узнать, как изменить символ в строку в VisualWorks. Если он не отвечает «Символ», мы не нашли правильного имени для символов табуляции в VisualWorks.


edit2:

Я не знаю короткий путь, чтобы превратить символ в строку в визуальных работ, поэтому здесь это решение, которое должно работать в любом случае.Это все, что asString будет делать в любом случае:
Так как вы, вероятно, хотите использовать его несколько раз, вы можете сохранить его в виде строки,

tabString := String with: Tab. 
info := stringOne, tabString, stringTwo 
+0

#asString, сообщение непонятный. Это не работает на Visual Works. Хммм я даже не могу найти его онлайн – user69514

+0

Он отвечает персонажу. Итак, вкладка «Символ» верна, но нет способа ее преобразования в строку. Все в порядке, мои вещи просто выглядят немного неуравновешенными. Спасибо, хотя – user69514

+0

Ах хорошо, тогда это просто до особенностей VisualWorks, о которых я не знаю. Однако я добавил более длинное решение, которое, надеюсь, будет работать ... –

3

Goog дал вам способ сделать строку, которая включала в себя вкладка

String with: Tab 

и сами вы обнаружили, что вкладка не была понята в VisualWorks и должна быть заменена

Character tab 

так поставить эти 2 вещи вместе в рабочей области оценивать, чтобы проверить это дает строку, содержащую вкладку с Character

String with: Character tab 

затем использовать, что в вашей конкатенации

info := stringOne, (String with: Character tab), stringTwo. 

(Если вы собираетесь сделать много конкатенации затем использовать WriteStream не ,)

+1

, по крайней мере, опасно использовать запятую без каких-либо предосторожностей. И есть ярлык для String с :, он называется asString. Поэтому я переписал бы это как stringOne copy, вкладку Character asString, stringTwo – nes1983

+0

За исключением того, что в некоторых версиях VisualWorks класс Character не реализует asString. Проверьте его на VW 3.5 и 7.8. Это одна из причин, почему я почти всегда использую WriteStream. –

2

кратчайшее использовать макрораскрытие:

info := '<1s><T><2s>' expandMacrosWith: one with: two 
0

решение на основе WriteStream (это немного более многословным, но весы хорошо, и вы можете использовать его в петлях, как сделать: separatedBy)

ws := (String new:50) writeStream. 
ws 
    nextPutAll: stringOne; 
    tab; 
    nextPutAll: stringTwo. 
info := ws contents. 

Или, если вам действительно нравится один лайнер код:

info := (String new writeStream) nextPutAll: stringOne; tab; nextPutAll: stringTwo; contents.