#oop #smalltalk
#ооп #smalltalk
Вопрос:
В настоящее время я работаю над заданием, выполняемым на smalltalk, и, хотя я только начинаю понимать язык, я немного озадачен и ищу какое-то направление.
Обычно для печати в расшифровке в Pharo я бы использовал:
print
Transcript show: 'Hello my name is: ' , self theName printString; cr
Кажется, что если я поставлю условие в начале, например
printNew
(age < 50) ifTrue: [ Transcript show: 'Hello my name is: ', self theName, 'and I am old' printString ]; cr
Кажется, я не могу заставить метод printNew печатать в расшифровке. Заранее благодарю вас!
Комментарии:
1. Итак, какова ценность
age
?
Ответ №1:
Позвольте мне отформатировать ваше выражение, чтобы лучше понять его:
(age < 50)
ifTrue: [
Transcript show:
'Hello my name is: ', self theName, 'and I am old' printString];
cr
похоже
(age < 5) ifTrue: [<something>]; cr
который, в свою очередь, имеет структуру
(age < 5) msg; cr
потому что в Smalltalk ifTrue: [<something>]
нет ничего, кроме сообщения. Теперь вы видите ошибку? Каскадный символ ;
сначала msg
отправляет Boolean
выражение (age < 5)
, а затем отправляет его cr
, которое он не понимает. Просто исправьте перенос между ]
и ; cr
:
(age < 50)
ifTrue: [
Transcript show:
'Hello my name is: ', self theName, 'and I am old' printString;
cr]
Обратите внимание также, что лучший способ написать то же самое
(age < 50)
ifTrue: [
Transcript
show: 'Hello my name is: ';
show: self theName;
show: ' and I am old' printString;
cr]
Почему? Потому что таким образом вы не создаете две промежуточные строки путем объединения трех частей вашего текста.
Наконец, обратите внимание, что из-за правил приоритета вам не нужны круглые скобки age < 50
Кстати, если вы младше 50
, вы не старый!