Thread overview | |||||
---|---|---|---|---|---|
|
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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to Vathix | 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 | ||||
---|---|---|---|---|
| ||||
Posted in reply to Unknown W. Brackets | 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 |
Copyright © 1999-2021 by the D Language Foundation