[squeak-dev] Re: Newbie Question: How does this work?

Joseph J Alotta joseph.alotta at gmail.com
Tue Oct 9 15:08:06 UTC 2012

Thanks for you help.  

I see that String has a #printf and the protocol is *printf,  and when the printf: method executes it looks everywhere for the FormatString class which is added to the end by the Printf package.

So the question is how did the *printf protocols get added to String?   It is not some magic by Monticello, because I did not use
Monticello, I just filein-ed the code.

So where in the code does it install the *printf methods to String?



On Oct 9, 2012, at 7:00 AM, squeak-dev-request at lists.squeakfoundation.org wrote:

> On 12-10-08 6:13 PM, Joseph J Alotta wrote:
>> '%6.2e' printf: 412.343434
> I loaded in the code you added in Squeak 4.3, executed the above, and 
> got "MessageNotUnderstood: ByteString>>printf:". I then loaded in Printf 
> from squeaksource.com/Printf and it worked.
> Monticello added some extra methods to various classes in the image. 
> Don't look at FormatString>>printf: Look at String>>printf:, which is a 
> superclass of ByteString. The protocol list has printf with an * before 
> it - *printf. The Monticello package added some extra methods to the 
> String class.
> Chris
> Thank you for asking interesting questions and staying involved.
> One way to find this out for yourself is to run this code to step through
> what is happening (highlighting the two lines and hitting the PrintIt key
> combo):
> self halt.
> '123%s456' printf: ('s').
> You'll find that the class ByteString also now has a #printf:method
> inherited from String class. So, the ByteString class knows how to
> convert itself to a FormatString if it sees a #printf: method.
> printf: arguments
>       ^ self asFormatString printf: arguments
> The ' * ' in *printf method category name is a visual clue that a load has
> added it to the default String class.

More information about the Squeak-dev mailing list