[Newbies] Adding methods to Integers...

Patrick Stein pat at nklein.com
Thu Apr 12 15:28:01 UTC 2007


	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.


	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?


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  
	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  
	questions along the way.  So, I wouldn't mind a little guidance on  

	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  
	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  

	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.

			^ 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  
	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  
	button at the bottom of the class-list in the browser.  Now, I see.

More information about the Beginners mailing list