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

Bruce bbruen at ...2308...
Fri Nov 2 13:08:14 CET 2012


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. 






More information about the User mailing list