Re: libseed-list module import suggestion
- From: "Alan Knowles" <alan akbkhome com>
- To: "Jonatan Liljedahl" <libseed-list-bounces gnome org>
- Cc: libseed-list gnome org
- Subject: Re: libseed-list module import suggestion
- Date: Thu, 17 Jun 2010 07:53:36 +0800
One of the points was that you might actually need to print y, to find out why the library does not work... - hence using this hiding method only works for very simple situations where you know the code will always work.
It's used by ExtJS in a few parts, and makes debugging that library a nightmare sometimes..
the phrase "Use with extreme care" comes to mind when I see it...
Regards
Alan
--- On 17/Jun/2010, Jonatan Liljedahl wrote:
> Here's another way, a lot simpler!
>
> //testmodule.js
>
> (function() {
> var y = 42;
>
> this.x = 123;
> this.f = function() { print(__script_path__+y) };
> })();
>
> //somescript.js
>
> t=imports.testmodule;
> t.y; //undefined
> t.x; //123
> t.f(); //somepath42
>
> Jonatan Liljedahl wrote:
> > Sure, that's one way to do it, but I still think that the seed importer
> > should be a bit more clever and not just import everything. You
> > shouldn't need to make work-arounds like below for such a basic
> > functionality. In most cases, you don't want to export the entire global
> > object but just selected variables.
> >
> > /Jonatan
> >
> > Alan Knowles wrote:
> >> I had quite a long play with that as well, in the end I came up with
> >>
> >> File.js
> >> --------------
> >> var _my_private_var
> >> var _my_private_var2
> >> var _my_private_var3
> >> ...
> >>
> >> var File = {
> >> read: function() { }
> >> ...
> >> }
> >> ================
> >>
> >> Usage
> >> File = imports.File.File;
> >>
> >> --------------------------------
> >>
> >> While not perfect (double typing the Class name..), It trades off
> >> quite a few issues..
> >>
> >> * Privates are generally private until you absolutely do not want them
> >> to be (this is very common that you need to find out what the privates
> >> contain. If you enforce hiding at runtime, it becomes very complex to
> >> test and debug).. especially since seed does not anything resembling
> >> have a debugger at present..
> >> eg. I can print imports.File.File._my_private_var if something wierd
> >> is happening..
> >>
> >> * It's reasonably clear what's happening.. - no hidden magic,
> >> requirement for documenting strange behavior...
> >>
> >> * enables you to do static classes, using 'this' to point to the
> >> static instance..
> >>
> >> * There is no layer of complexity meeded in the engine (always a good
> >> idea to avoid)
> >>
> >> Anyway there's a 2c viewpoint....
> >>
> >> Regards
> >> Alan
> >>
> >> --- On 14/Jun/2010, Jonatan Liljedahl wrote:
> >>> Currently, importing another JS file imports all toplevel variables.
> >>> This is not very nice, since you can't have private stuff without
> >>> resorting to some hack like this:
> >>>
> >>> var _exports = (function() {
> >>> var x = 123;
> >>> var y = 42;
> >>> var f = function() { print(x) };
> >>>
> >>> return {
> >>> y:y,
> >>> f:f
> >>> }
> >>> })();
> >>>
> >>> for(var k in _exports) {
> >>> this[k] = _exports[k];
> >>> }
> >>>
> >>> I suggest that if a variable EXPORTS is found, only the symbols
> >>> listed in it will be exported:
> >>>
> >>> EXPORTS=[foo,bar,x,y];
> >>>
> >>> seed_importer_handle_file() would then do something like this:
> >>>
> >>> if global.EXPORTS exist and isArray:
> >>> exports = newEmptyObject()
> >>> for each s in EXPORTS:
> >>> exports[s] = global[s]
> >>> else:
> >>> exports = global
> >>>
> >>> return exports
> >>>
> >>> One could additionally have a naming convention where symbols
> >>> prefixed with underscore is ignored unless EXPORTS is defined.
> >>>
> >>> What do you think?
> >>>
> >>> /Jonatan
> >>> _______________________________________________
> >>> libseed-list mailing list
> >>> libseed-list gnome org
> >>> http://mail.gnome.org/mailman/listinfo/libseed-list
> >>
> >> _______________________________________________
> >> libseed-list mailing list
> >> libseed-list gnome org
> >> http://mail.gnome.org/mailman/listinfo/libseed-list
> >
>
> _______________________________________________
> libseed-list mailing list
> libseed-list gnome org
> http://mail.gnome.org/mailman/listinfo/libseed-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]