The problem is in the Transparent color element of the my bad array. Transparent color class implements #isSelfEvaluating of that way...
isSelfEvaluating
������ ^ self class == Color
That condition dont works in the first element of my bad array.
Regards, and thanks for the help :|
Apparently you find a problem in self evaluating on color or related.
Let me explain:
The idea of printing an object is that in some case
�� �� �� �� anObject printString let you recreate the object
example
�� �� �� �� 1
�� �� �� �� true
�� �� �� �� #(1)
�� �� �� �� #(1 2)
�� �� �� �� 10@50
this means that either you get the same object or when you executed ��
its printed representation you get it back.
This is handy when playing with an inspector or in a workspace
now for array if you get an array of points in the past
printing it would return
�� �� �� �� #(10 #@ 50 20 #@ 50)
which is different from what is was really
�� �� �� �� {10@50 . 20@50}
�� �� �� �� or Array new: 2 at:1 put: 10@50 ; at:2 put: 20@50
So when an object is selfevaluating it measn that its printed ��
representation can be used to recreate it
When an array contains only self evaluating objects then it is printed ��
with { } since it can also be recreated
now if you get an object inside an array taht is not self evaluating ��
then your collection cannot be self evaluating.
so we say it anarray of ... instead of a #( 10 # @ 20....)
But in your case something went wrong because color and others are ��
self evaluating.
could you provide with a snippet of code that we can check where the ��
problem is coming from?
Stef
On Oct 27, 2009, at 10:58 PM, nullPointer wrote:> Sent from the Pharo Smalltalk mailing list archive at Nabble.com.
>
> I don��t understand the behavior of printString method.
>
> in a class I define a method #style , which returns an array...
>
> style
>
> style notNil ifTrue:[ ^style ]
> ifFalse:[ ^{ self borderColor . self borderWidth . self color . ��
> self
> gradientColor . (self cornerStyle = #rounded) . true ��}].
>
> That method returns many times an Array. If #printString of that ��
> array is
> called the result is...
> '{Color black. 0. (Color r: 0.892 g: 0.887 b: 0.879). nil. false. ��
> true}'
>
>
> Well i have another method with same name in another class
>
> style
>
> ^{ self borderColor . self borderWidth . self color . self ��
> gradientColor .
> (self cornerStyle = #rounded) . true ��}
>
>
> but in that case when i call #printString of the Array result ...
> 'an Array(Color transparent 0 (Color r: 0.827 g: 0.827 b: 0.827) nil ��
> true
> true)'.
>
> I don��t understand nothing :| ��Both are instances of Array, and both ��
> is
> declared of same way.
>
>
> Regards
>
>
> --
> View this message in context: http://n2.nabble.com/Strange-behavior-of-printString-method-tp3902051p3902051.html
>
> _______________________________________________
> Pharo-project mailing list
> [hidden email]
> http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
_______________________________________________
Pharo-project mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-project
View this message in context: Re: [Pharo-project] Strange behavior of #printString method
Sent from the Pharo Smalltalk mailing list archive at Nabble.com.