2013-03-25 6 views
5

Sono un principiante Smalltalk, attualmente in riproduzione con Pharo e sono curioso di una scelta nel messaggio sottoclasse: la parola chiave instanceVariableNames vuole qualcosa in grado di rispondere al messaggio subStrings . Mi chiedo perché non si aspetti qualcosa di più strutturato come un array, dal momento che ciò che è necessario è una collezione di simboli.Perché instanceVariableNames è una stringa e non una raccolta più strutturata

Object subclass: #Experiment instanceVariableNames: #(#foo #bar). 

mia unica indovinare questo è qualche ragione storica: forse non tutti hanno Smalltalks array o la loro sintassi differisce di molto da scivolare in un messaggio interiore come sottoclasse. C'è qualche altra spiegazione?

risposta

2

Sì, è un po 'strano. Penso che la ragione principale sia che ha bisogno di nomi, quindi sul compilatore della creazione di classi analizza la stringa e ottiene i nomi come sottostringhe, Inoltre non è necessario controllare se qualcuno ti ha passato un array con numeri o altri array.

Come per lo stesso array, era presente nelle specifiche Smalltalk-80, quindi sono abbastanza comuni. (Non come array dinamici { expr1 . expr2 . expr3} che sono state introdotte in Squeak.

Inoltre ci sono un sacco di cose strane. Ad esempio, in questo momento Pharo utilizza Parser che è una sottoclasse di Scanner ... Tu che sta per cambiare presto .

+0

Infatti, il nuovo ClassBuilder accetta matrici reali per i nomi delle variabili di istanza. – camillobruni