[Newbies] Adding methods to Integers...
Patrick Stein
pat at nklein.com
Thu Apr 12 15:28:01 UTC 2007
Background:
::::::::::::::::::::::
The most recent MathFactor Podcast ( http://mathfactor.uark.edu/ )
ended with a request to write a computer program that could, in
principal, given enough time and memory, compute Graham's Number
( http://mathworld.wolfram.com/GrahamsNumber.html ).
Smalltalk was a natural choice since it already supports LargeIntegers.
Problem:
:::::::::::::::
Being new to Smalltalk, my first thought was that I should make my
own class as a subclass of LargePositiveInteger, put my methods there,
and violá. Alas, no love.
I ran into the following problems:
* I couldn't find a way to give a value to myself.
* I couldn't find a way to get integers to adapt to my class anyway.
I ended up just adding my methods to the Integer class. But, this felt
very naughty. Is it the usual approach?
Thanks,
Patrick
Bonus Questions:
:::::::::::::::::::::::::::::
[ Actually, this section should be titled, "Bonus Questions: which
it turns
out that I managed to answer for myself, but have left here for
pedagogic
reasons". ]
What I really want at the moment is to know if adding methods to the
Kernel classes is considered legit. But, I ran into a whole set of
other
questions along the way. So, I wouldn't mind a little guidance on
these
either.
The new: method:
::::::::::::::::::::::::::::::
The withAtLeastNDigits method of LargePositiveInteger does this
(variable names changed for clarity):
nn := self class new: nDigits.
I cannot find the "new:" method in the class browser under Class,
nor can I find any hint of it somehow being part of
LargePositiveInteger,
Integer, Number, Magnitude, Object, or ProtoObject. Actually, I just
answered this one myself.... the Class class's hierarchy is
Class < ClassDescription < Behavior < Object. The "new:" is in
Behavior.
Initialization methods?:
:::::::::::::::::::::::::::::::::::::::
The only way that I can understand the "i" and "hours" methods of the
Number class are if I somehow think the Complex and Duration classes
have class methods in addition to their instance methods. For example,
here is the "i" method of the Number class.
i
^ Complex real: 0 imaginary: self
That seems straightforward enough. Given a number, say "5" and pass
it the "i" message. It will return a complex number with 0 for the
real
and 5 for the imaginary. Except, I can't where the "real: imaginary:"
method is defined with the class browser.
Blah, and I just answered this one, too. I hadn't twigged on the
"class"
button at the bottom of the class-list in the browser. Now, I see.
More information about the Beginners
mailing list