On Wed, 13 Sep 2017, Mattias Gaertner via Lazarus wrote:
On Wed, 13 Sep 2017 10:44:23 +0200 (CEST)
Michael Van Canneyt via Lazarus <lazarus@lists.lazarus-ide.org> wrote:
[...]
As long as there are no command-line switch and directive for setting
namespaces, they are completely useless. And even with them, the benefit is
doubtful.
The benefit of writing fpreport.exporthtml versus fpreportexporthtml is zero.
It's a little bit better than zero. For example shorter uses clause.
Without using a switch to set namespaces ? Please Explain ?
os.utils.pas(14)
testns.dpr(6) Error: E2003 Undeclared identifier: 'webfunction'
testns.dpr(7)
webfunction is in the web.utils.pas unit.
Did you add "uses utils"?
Yes, obviously. Here is the test program:
program testns;
uses utils;
begin
writeln(webfunction);
end.
unit web.utils;
interface
function webfunction : string;
implementation
function webfunction : string;
begin
Result:='web';
end;
end.
unit os.utils;
interface
function osfunction : string;
implementation
function osfunction : string;
begin
Result:='os';
end;
end.
There is no switch to use "web.*" like in Java.
In Delphi there is: /NSweb.
But as soon as you use 2 namespaces (/NSos /NSWeb), you are stuck.
As you see from the output I posted, it compiles first os.utils
and uses that to satisfy the "uses utils;".
To be complete: it depends on the order of the NS switches, if you reverse
the order, it will work - but that doesn't help if you have a big project
which has many units using utils from one or the other namespace.
The first one wins.
So, to disambiguate, that forces me to write
uses web.utils;
"uses utils" should be enough.
As I demonstrated: it clearly is not.
I carefully tested everything before posting my remark.
Michael.
--
_______________________________________________
Lazarus mailing list
Lazarus@lists.lazarus-ide.org
https://lists.lazarus-ide.org/listinfo/lazarus