2016-10-18 1 views
0

Je travaille actuellement sur une tâche faite dans smalltalk et pendant que je suis juste en train de comprendre le langage, je suis un peu perplexe et je cherche une certaine direction.Je n'arrive pas à obtenir la sortie dans la transcription [Smalltalk]

Normalement, pour imprimer à la transcription dans Pharo j'utiliser:

print 
    Transcript show: 'Hello my name is: ' , self theName printString; cr 

Il semble que si je mets un conditionnel au début, comme

printNew 
     (age < 50) ifTrue: [ Transcript show: 'Hello my name is: ', self theName, 'and I am old' printString ]; cr 

Je ne peux pas sembler obtenir la méthode printNew à imprimer dans la transcription. Merci d'avance!

+1

Alors, quelle est la valeur de 'age'? –

Répondre

2

Permettez-moi de formater votre expression pour mieux comprendre:

(age < 50) 
    ifTrue: [ 
    Transcript show: 
     'Hello my name is: ', self theName, 'and I am old' printString]; 
    cr 

ressemble

(age < 5) ifTrue: [<something>]; cr 

qui à son tour a la structure de

(age < 5) msg; cr 

parce que dans Smalltalk ifTrue: [<something>] est rien mais un message. Voyez-vous l'erreur maintenant? Le symbole de cascade ; envoie en premier msg à l'expression Boolean(age < 5) puis lui envoie cr qu'il ne comprend pas. Il suffit de fixer la transposition entre ] et ; cr:

(age < 50) 
    ifTrue: [ 
    Transcript show: 
     'Hello my name is: ', self theName, 'and I am old' printString; 
     cr] 

Notez également qu'une meilleure façon d'écrire est la même

(age < 50) 
    ifTrue: [ 
    Transcript 
     show: 'Hello my name is: '; 
     show: self theName; 
     show: ' and I am old' printString; 
     cr] 

Pourquoi? Parce que de cette façon, vous ne créez pas deux chaînes intermédiaires en concaténant les trois parties de votre texte.

Notons enfin qu'en raison de règles de priorité que vous ne avez pas besoin des parenthèses autour age < 50

BTW, si vous êtes sous 50 vous n'êtes pas vieux!