[Gambas-user] Object.Class(Me).Name and class name cases occassionally don't match

Benoît Minisini gambas at ...1...
Fri Nov 2 13:12:58 CET 2012


Le 02/11/2012 13:08, Bruce a écrit :
> On Wed, 2012-10-31 at 15:18 +0100, Benoît Minisini wrote:
>> Le 31/10/2012 15:13, Bruce a écrit :
>>> On Wed, 2012-10-31 at 14:02 +0100, Benoît Minisini wrote:
>>>> Le 31/10/2012 06:04, Bruce a écrit :
>>>>> I have a library which contains classes to analyse horse trial times.
>>>>> These classes rely on some files which contain some static data about
>>>>> the various analyses, these files are all called AbcZyx.meta where
>>>>> AbcXyz is the name of the relevant class (note the mixed case in both).
>>>>> When the first instance of any of these classes is created, it reads
>>>>> that associated file and sets up the static data.
>>>>>
>>>>> Somehow lately a strange thing has happened, one of the classes when it
>>>>> loads has it's name converted to lower case.  All the others preserve
>>>>> the case of the class name.
>>>>>
>>>>> I've put the following trace into the early methods for some of the
>>>>> projects that use this library:
>>>>>      Dim wkclass As Class
>>>>>      For Each wkclass In Classes
>>>>>        If Not IsNull(wkclass.Parent) Then
>>>>>          If wkclass.Parent.Name = "BaseBO" Then Print wkclass.Name
>>>>>        Endif
>>>>>      Next
>>>>>
>>>>> and generally this is what I get vs the "real" class name:
>>>>> ClassNameloaded	ClassNamereal
>>>>> --------------- --------------
>>>>> TrialSpeeds	TrialSpeeds
>>>>> TrialSpeed1	TrialSpeed1
>>>>> TrialSpeed3	TrialSpeed3
>>>>> TrialSpeed2	TrialSpeed2
>>>>> TrackMap	TrackMap
>>>>> TrackAltMap	TrackAltMap
>>>>> Horse		Horse
>>>>> trackname	TrackName	<------????
>>>>> Jockey		Jockey
>>>>> Track		Track
>>>>>
>>>>> So all of them, except TrackName have the expected class name.
>>>>>
>>>>> and when it tries to load the file via
>>>>>      Dim sFilename as String
>>>>>      Dim hMetaFile as File
>>>>>      sFileName=Object.Class(Me).Name&".meta"
>>>>>      Try hMetafile = Open $templatepath &/ sFileName For Input
>>>>>      etc
>>>>> it fails, because of the case mismatching of the names.
>>>>>
>>>>> I have searched every file in the library project and all of the client
>>>>> projects and can not find any instance of the string "trackname".  I
>>>>> have cleaned, recompiled etc etc each of these projects and this fail
>>>>> still occurs.
>>>>>
>>>>> Is there something special about a class called "TrackName"?  It only
>>>>> ever happens for that class.
>>>>>
>>>>> Totally bewildered?
>>>>> Bruce
>>>>>
>>>>
>>>> There must be an occurence of "trackname" in lower case somewhere in
>>>> your source code. The name of the class is the first name encountered by
>>>> the interpreter.
>>>>
>>>> Regards,
>>>>
>>> That was my first thought too.  But when I mean "searched every file" I
>>> mean as in 'grep -r trackname' in both the client projects and the
>>> library I get no result, not even in any of the binary files.
>>>
>>> What is even stranger, I tried to create a demo of this problem and the
>>> class names are all correct.  Then I renamed the class in the library to
>>> "TrackNames" and everything works. Everywhere (well after a few
>>> corrections and recompiles that is.)
>>>
>>> Finally I renamed it back to TrackName and the problem reappears, but
>>> only in the original client projects, not in the "new" project.  Which
>>> gets us back to "There must be an occurence of "trackname" in lower case
>>> somewhere in your source code."
>>>
>>> But according to grep (and the search form) there isn't.  No code, no
>>> strings, no comments.
>>>
>>> I am going to go with using the new name (Tracknames) and rebuild
>>> everything that uses the library, but this is "weird".
>>>
>>>
>>> ...Uh oh, hang on..
>>>
>>> I just reread that "The name of the class is the first name encountered
>>> by the interpreter." bit.
>>>
>>> Maybe some other component/library used by these clients has a
>>> "trackname" symbol for something.  hmmmm.
>>>
>>> be-back-tomorrow
>>> Bruce
>>>
>>
>> Maybe the simpler would be naming your ".meta" file in lower case?
>>
>> --
>> Benoît Minisini
>>
> Well I finally found it. But it's not pretty.
> In one component that is loaded earlier than the one I want, there is a
> string var called "trackname".  Unfortunately, not only is it not a
> class name it is a local var in a method.
>
> This is "not good".
>
> Further unfortunately, there appears to be certain horse race in
> Melbourne shortly, next Tuesday?? I think.  This will probably take up a
> great deal of my/our time.
>
> The best I can do now is "why should a local var name set a precedent
> for case naming things?"
>
> I have a half cooked example but I am going to be pretty busy this week,
> I "will be back" after the Melbourne Cup.
>
> Bruce
>
> Tips? "Americaine" is still looking good.
>

Again, symbol are not case sensitive, but file names are. So using class 
names to store metadata files was not a good idea.

The solution is converting the class name to uppercase (or lowercase) 
before using it as a filename.

Regards,

-- 
Benoît Minisini




More information about the User mailing list