Hi,

a) creating a class is message send like any other... and the returned value is 
the newly created class.

So you can do

locellClass := Object subclass: #LOCell.
locellClass compile: 'myMethod'.

b) Alternatively (what I usually do), is `#MyClass asClass` (or Smalltalk 
classNamed: #MyClass).

Note that using the former (`asClass`) is (justly) frowned upon when used in 
regular code, but it is perfectly fine in Playground. (Just like 'MyPackage' 
asPackage, etc.)

As for distribution (which you've mentioned in another mail), I write code like 
this in my startup scripts, e.g. 
https://github.com/peteruhnak/pharo-scripts/blob/master/config/5.0/roassal-zoomableInteraction.st

Likewise you can just file-out a method, class, or package(s) and send that to 
another person, who can just file it in.

Final note regarding your string operations... try to avoid using comma to 
concat many strings, using stream is preferable (from both performance and 
readability), e.g.

LOCell compile: (String streamContents: [ :stream |
        stream
                nextPutAll: 'initialize'; cr;
                nextPutAll: '    super initialize.'; cr.
]).

Also Pharo understands multiline strings just fine, so you can do this:

LOCell compile: 'initialize
    super initialize.
    self label: ''''.
    self borderWidth: 2'


If you need to specify parameters, take a look at String>>format:

'Today is {1}.' format: {Date today}.
'Today is {date}.' format: (Dictionary with: #date->Date today).

Peter


On Sat, Oct 01, 2016 at 12:39:26PM -0700, CodeDmitry wrote:
> 
> ([
>     LOCell compile:
>         'initialize', (String cr),
>         '    super initialize.', (String cr),
>         '    self label: ''''.', (String cr),
>         '    self borderWidth: 2.', (String cr),
>         '    bounds := (0@0) corner: (16@16).', (String cr),
>         '    offColor := Color paleYellow.', (String cr),
>         '    onColor := Color paleBlue darker.', (String cr),
>         '    self useSquareCorners.', (String cr),
>         '    self turnOff.'    
> ] value).
> 
> ([
>     LOGame compile:    
>         'cellsPerSide', (String cr),
>         '    ^10'
> ] value).    
> 
> ([
>     LOGame compile:
>         'toggleNeighboursOfCellAt: i at: j', (String cr),
>         '    (i > 1) ifTrue: [', (String cr),
>         '        (cells at: i - 1 at: j) toggleState.', (String cr),
>         '    ].', (String cr),
>         (String cr),
>         '    (i < self cellsPerSide) ifTrue: [', (String cr),
>         '        (cells at: i + 1 at: j) toggleState.', (String cr),
>         '    ].', (String cr),
>         (String cr),
>         '    (j > 1) ifTrue: [', (String cr),
>         '        (cells at: i at: j - 1) toggleState.', (String cr),
>         '    ].', (String cr),
>         (String cr),
>         '    (j < self cellsPerSide) ifTrue: [', (String cr),
>         '        (cells at: i at: j + 1) toggleState.', (String cr),
>         '    ].'         
> ] value).
> 
> ([
>     LOGame compile:
>         'newCellAt: i at: j', (String cr),
>         '    | c origin | ', (String cr), 
>         (String cr),
>         '    c := LOCell new.', (String cr),
>         '    origin := self innerBounds origin.', (String cr),
>         (String cr),
>         '    self addMorph: c.', (String cr),
>         '    ', (String cr),
>         '    c position: ([', (String cr),
>         '        | x_index y_index c_width c_height |', (String cr),
>         (String cr),
>         '        x_index := i - 1.', (String cr),
>         '        y_index := j - 1.', (String cr),
>         '        c_width := c width.', (String cr),
>         '        c_height := c height.', (String cr),
>         '        ', (String cr),
>         '        (x_index * c_width)@(y_index * c_height) + origin', (String
> cr),
>         '    ] value).', (String cr),
>         (String cr),
>         '    c mouseAction: [', (String cr),
>         '        self toggleNeighboursOfCellAt: i at: j.', (String cr),
>         '    ].', (String cr),
>         '    ^ c.', (String cr)     
> ] value).
> 
> ([
>     LOGame compile:
>         'initialize', (String cr),
>         '    | sampleCell width height n |', (String cr),
>         (String cr),
>         '    super initialize.', (String cr),
>         '    n := self cellsPerSide.', (String cr),
>         (String cr),            
>         '    sampleCell := LOCell new.', (String cr),
>         '    width := sampleCell width.', (String cr),
>         '    height := sampleCell height.', (String cr),
>         (String cr),            
>         '    self bounds: ', (String cr),
>         '        ((5@5) extent:', (String cr), 
>         '            (width * n)@(height * n) + ', (String cr),
>         '            (2 * (self borderWidth))).', (String cr),
>         (String cr),            
>         '    cells := Matrix new: n tabulate: [:i :j |', (String cr),
>         '        self newCellAt: i at: j.', (String cr),
>         '    ].'        
> ] value).
> 
> 
> 
> 
> --
> View this message in context: 
> http://forum.world.st/New-to-Pharo-a-bunch-of-questions-tp4917701p4917707.html
> Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com.
> 

Reply via email to