Re: libseed-list module import suggestion
- From: Jonatan Liljedahl <lijon kymatica com>
- To: Seed - Gnome Javascript <libseed-list gnome org>
- Subject: Re: libseed-list module import suggestion
- Date: Thu, 17 Jun 2010 01:19:00 +0200
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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]