Florian Gross <florgro / gmail.com> wrote:
> Gerald schrieb:
> 
>> It seems that the printf conversion to %c tries to call a specific
>> method of my class to convert the object to the appropriate format. I am
>> a bit confused about the message "can't convert to integer", since the
>> to_i method is defined, and sucessfully called that the printf "%d"
>> line.
>> 
>> So, two questions arise
>> 
>> - what method am I supposed to provied for printf so it can handle the
>>   '%s' format string
>> 
>> - How can I figure this out myself. It seems that printf is trying to
>>   call something, but I have no way of telling exactly  what  it is
>>   trying to do. Is there some kind of tracing/debugging that can be
>>   switched on to see what's printf is trying to do ?
> 
> I guessed that it would try to implicitly convert the object to an 
> Integer. Ruby usually uses to_int() for that. to_i() is used for 
> explicit conversions.
> 
> I verified that guess by doing this:
> 
> irb(main):002:0> "%c" % Class.new { def to_int() ?A end }.new
> => "A"
> 
> Hope this helps.

Yes, that was the solution, thank you very much. I must say it is a bit
confusing that the string and float methods are called to_s and to_f,
that to_i works for %d, but not for %c, and to_int works for both %d and
%c.  Can you give me a referer to some official documentation describing
%these conversion functions ?

Thanks a lot,