[Newbies] Re: Best way to implement two-dimensional array
bert at freudenbergs.de
Tue Sep 4 22:38:57 UTC 2007
Also, you easily can inflate your image to ridiculous sizes with
class variables accidentally holding onto huge structures.
Maintaining an image requires a bit of discipline. It's an organic
thing, which quite literally has been nurtured for 30 years now (with
periods of hibernation of course).
- Bert -
On Sep 4, 2007, at 15:31 , John Almberg wrote:
> Yes, that's clear, and I do intend to initialize this big table
> with code, mainly to make it easy for me to spot and fix typos.
> However, it's still cool to gain a sense of the concreteness of
> Smalltalk classes.
> And I find myself trying out code in a Workspace to see how things
> work, before encoding it in a method. I suspect interactively
> tweaking a class might help me figure things out before committing
> it to an initialize method.
> -- John
> On Sep 4, 2007, at 5:29 PM, nicolas cellier wrote:
>> However, Classes and methods are Objects which have well defined
>> tools to help them migrating from an image to another, even to
>> another Smalltalk dialect. This ease code sharing.
>> This is less clear for arbitrary objects...
>> That's why I restrict myself to initialize these class vars in an
>> initialize method in the class side, and loose some of the power
>> of the image...
>> But there is a better reason:
>> if you construct your object with some snippets of code, say in an
>> inspector or a debugger:
>> MyTable at: 1 put: 30 degreesToRadians cos * 4
>> Then your image will loose the history of construction.
>> All it retains is 3.464101615137755 which is somehow less expressive.
>> Bert Freudenberg a écrit :
>>> Seems you've made the first step to truly understanding Smalltalk :)
>>> Also you must realize that the browser is just a view into that
>>> live system of objects we call classes and is simply modifying
>>> those live objects. You could do that in an inspector as well,
>>> but the class browser is more specialized so it is easier to use
>>> for that purpose.
>>> Welcome to Real Objects.
>>> - Bert -
>>> On Sep 4, 2007, at 12:19 , John Almberg wrote:
>>>> Whoa... that worked, but the implications are a bit hard to
>>>> So MyClass is an object in my Smalltalk image, and it can have
>>>> variables that I can set interactively, and the values contained
>>>> therein are now part of the class...
>>>> I keep reading that classes are objects, but this is the first
>>>> time I've seen something that makes me realize that they are
>>>> fundamentally different than objects in other languages. I guess
>>>> because they are 'live', in some sense, in the Smalltalk
>>>> environment. That is, not just source code, but an instantiated
>>>> Talk about paradigm whiplash... I'm going to have to think about
>>>> this, a bit :-)
>>>> -- John
>>>>> Type "MyClass", select it, press Cmd-i (or Alt-i). You get an
>>>>> inspector on a class - which of course is the instance of
>>>>> another class, as everything is an object (and hence an
>>>>> instance of a class) in Smalltalk. Anyway, you should see a
>>>>> reference to the superclass, a dictionary of all the methods,
>>>>> the list of instance variables and subclasses etc. Class
>>>>> variables are simply held in a Dictionary in the "classPool"
>>>>> instance variable of that class. So by inspecting that and
>>>>> drilling down into your class var you can modify it.
>>>>> A simpler way to get at the contents of your class var is just
>>>>> selecting its name in a browser showing any method of your
>>>>> class, and press Cmd-i there. That works because in the
>>>>> browser, code is evaluated in the context of the selected class.
>>>>> - Bert -
More information about the Beginners