View mode: basic / threaded / horizontal-split · Log in · Help
June 20, 2005
Import in functions
It would be nice if we could import in functions, especially when  
inserting debug code.


void foo(int val)
{
   import std.stdio;
   writefln("DEBUG: val = %d", val);
}


One particularly nice use for this is when using unittests. Often times  
you want to import something just for a unittest but don't want it  
imported otherwise. Currently, we use version() or debug() to do that. It  
would be a whole lot simpler to just import right in the unittest.


Possible issues:


for(import std.string;;)
{
   // ...
}

for(;; import std.string, i++)
{
   // ...
}
June 20, 2005
Re: Import in functions
I don't like it in functions, myself, because it just makes things 
harder to read - although, I suppose, that's not the language's choice 
to enforce.  Still, it wouldn't work in C either.

I do very much like it in unittests, though, myself.  Many times, you'll 
want writef for the unittest (e.g. to explain *what* failed, better than 
assert can) but you won't need std.stdio for the general (no unittest) case.

That said, it's not like it's linked in anyway (or I should hope not!), 
so it's not that huge of a deal.  I guess the module constructors/etc. 
would be called, though?

-[Unknown]


> It would be nice if we could import in functions, especially when  
> inserting debug code.
> 
> 
> void foo(int val)
> {
>    import std.stdio;
>    writefln("DEBUG: val = %d", val);
> }
> 
> 
> One particularly nice use for this is when using unittests. Often times  
> you want to import something just for a unittest but don't want it  
> imported otherwise. Currently, we use version() or debug() to do that. 
> It  would be a whole lot simpler to just import right in the unittest.
> 
> 
> Possible issues:
> 
> 
> for(import std.string;;)
> {
>    // ...
> }
> 
> for(;; import std.string, i++)
> {
>    // ...
> }
June 20, 2005
Re: Import in functions
On Mon, 20 Jun 2005 03:22:46 -0700, Unknown W. Brackets wrote:

> I do very much like it in unittests, though, myself.  Many times, you'll 
> want writef for the unittest (e.g. to explain *what* failed, better than 
> assert can) but you won't need std.stdio for the general (no unittest) case.

Yes. assert() tells you what the result is *not*, and not what the result
is. I get around this limitation by using the debug statement.

<code>
debug private import std.stdio;
int doubleit(int x)
{
   return 2 + x;
}

unittest {
   debug writefln("%d", doubleit(1));
   assert( doubleit(1) == 2);
}

void main()
{
}
</code>

I know its not perfect but it's not too much imposition for me.

-- 
Derek Parnell
Melbourne, Australia
20/06/2005 9:26:45 PM
Top | Discussion index | About this forum | D home