Re: Downside to namespacing

new topic     » goto parent     » topic index » view thread      » older message » newer message

irv mullins wrote:
> 
> I have a program which 'includes' a module. Let's call it lv.e.
> The module handles listviews, exporting only the variables 
> necessary to add, scroll, and respond to list events. 
> 
> I want to use two listviews in my program. Both use the routines in lv.e.
> I can't include the lv module twice, with different namespace qualifiers,
> but I can copy the module under a new name, and then include them with 
> qualifiers:
> 
> include lv1.e as view1
> include lv2.e as view2
> 
> So far so good (well, not really, but it works).
> 
> Now, when I want to refer to the variables in view1, for example, 
> I must write:
> 
>
> view1:add_row(view1:store,view1:iter,view1:this,view1:that,view1:the_other....)
> 
> The view, as well as each variable must be individually qualified. This is 
> a simple example, I'm sure you can think of others where the qualifying 
> would get even more complex. Why can't we say:
> 
> with view1 do
>   add_row(store,iter,this,that,the_other)
> end with
> 
> Doesn't that make more sense?
> Perhaps someone can see an even better way of doing this.

This might be a long thread blink

As we all know already, Euphoria only reads in an "include" file once,
regardless of how many times it is mentioned in your source code. This
means that there is only one copy of the routines and variables in memory.
The trick of including identical (contents) files with different 
namespaces is only workable in very few circumstances. In your case,
two copies might work, but soon as you need three or more it gets 
just silly.

So, don't do it. It's not worth the effort.

Back to basics...

** Avoid global variables at all cost. Instead, access local variables
via global routines. Your "interface" should just consist of global
routines. 
** Create multiple instances of objects (eg. ListViews) using Euphoria
sequence(s), and return to your application code a reference to the
instances, rather than direct access to it.
** All your lv library routines will access the ListView data (handles, ...)
by using the reference id, supplied to them from the application.

You will only need one lv.e file then, no matter how many ListViews you
create in your application. 


-- 
Derek Parnell
Melbourne, Australia

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu