On Thursday, 27 November 2014 at 17:22:36 UTC, Suliman wrote:
ah, that's it! as spec says, D determines function return
value from
the first 'return' statement it seen. in your case this is
`return;`,
so function return type is determined to be `void`.
if you doing `auto` functions, try to arrange your code so the
first
`return` returning the actual value.
besides, your code is wrong anyway, 'cause you can't have
function that
returns both "nothing" and "something". your first `return;`
should
either return something, or must be changed to throwing some
exception.
How I can terminate program? First return I used to terminate
app if config file is exists.
You can use this:
auto parseConfig()
{
string txtlinks = buildPath(getcwd,"notexist");
if(exists(txtlinks))
{
auto lines = File(txtlinks, "r").byLine;
return lines;
}
writeln("Can't find input file with list of links.");
return typeof(return)();
}
it works somehow, but it is not good way how to do it.
Other way is use exit
if(!exists(txtlinks))
{
import core.runtime;
import std.c.process;
writeln("Can't find input file with list of links.");
Runtime.terminate();
exit(1);
}
But best way is use throw exception
if(!exists(txtlinks))
{
throw new Exception("Can't find input file with list of
links.");
}
and catch it somewhere from calling side