2016-10-18 58 views
0

我目前正在做一個在smalltalk中完成的任務,雖然我剛剛掌握了語言,但我有點難住,正在尋找一些方向。似乎無法獲得輸出成績單[Smalltalk]

通常打印到菲羅談話,我會用:

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

那麼「年齡」的價值是什麼? –

回答

2

讓我格式化你的表達,以便更好地理解它:

(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>]是什麼結構但是一個消息。你現在看到了錯誤嗎?級聯符號;首先發送msgBoolean表達式(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下你是不是老了!