2013-03-10 10 views
5

Nel libro Smalltalk Best Practice Patterns da Kent Beck, il segno doppio maggiore (>>) viene utilizzato per definire i metodi in questo modo:metodi Definizione con il doppio segno maggiore (>>) in Smalltalk

Point class>>x: xNumber y: yNumber 
    ^self new 
     setX: xNumber 
     y: yNumber 

Point>>setX: xNumber y: yNumber 
    x := xNumber. 
    y := yNumber. 
    ^self 

Tuttavia, non posso farlo funzionare in GNU Smalltalk.

È valida la sintassi in alcune implementazioni di Smalltalk? O è solo una specie di pseudo codice?

risposta

5

In realtà questo è Pseudo codice.

In altre lingue si può usare il . dire alla gente che il metodo è in questa classe, ma in Smalltalk si scrive >>

Cosa si dovrebbe fare in uno Smalltalk come Squeak o Pharo per

Point class>>x: xNumber y: yNumber 
    ^self new 
     setX: xNumber 
     y: yNumber 
  1. Aprire il System Browser
  2. Fare clic su Classe, un pulsante che mostra il lato classe della classe.
  3. incollare il metodo nell'area di testo con il codice sorgente:

    x: xNumber y: yNumber 
        ^self new 
         setX: xNumber 
         y: yNumber 
    
  4. Ctrl-s per salvare il codice

Per

Point>>setX: xNumber y: yNumber 
    x := xNumber. 
    y := yNumber. 
    ^self 

si farebbe il lo stesso, ma non usare il lato classe

4

Inoltre, si noti che in effetti, # >> è un messaggio che è possibile inviare a una classe e in pratica accede al dizionario del metodo per il simbolo (argomento del selettore). Vedi, classe di comportamento, il metodo >>

>> selector 
"Answer the compiled method associated with the argument, selector (a 
Symbol), a message selector in the receiver's method dictionary. If the 
selector is not in the dictionary, create an error notification." 

^self compiledMethodAt: selector 

Così si può fare, per esempio (ispezionare che)

Point class >> #x:y: 

Avviso comunque, che qui inviamo #class perché #x: y: è un metodo di classe. Se si desidera accedere a un metodo di lato esempio, dire #normalized allora si può fare:

Point >> #normalized 
2

La sintassi corretta per GNU Smalltalk sarà simile a questa:

Point class extend [ 
    x: xNumber y: yNumber [ 
     ^self new 
      setX: xNumber 
      y: yNumber ] 
] 

Point extend [ 
    setX: xNumber y: yNumber [ 
     x := xNumber. 
     y := yNumber. 
     ^self ] 
] 

Per ulteriori informazioni su GNU Smalltalk sintassi vedi here.

Problemi correlati