Re: [Vala] How should I handle a constructor that fails?
- From: Jiří Zárevúcky <zarevucky jiri gmail com>
- To: Sam Danielson <samdanielson gmail com>
- Cc: Vala ML <vala-list gnome org>
- Subject: Re: [Vala] How should I handle a constructor that fails?
- Date: Wed, 17 Jun 2009 00:39:24 +0200
You can't throw from the construct block, but you can throw from the
construction method. Thus, the correct way would be:
class Foo : Object {
string filename { get; set; }
public Foo.with_file (string filename) throws IOError{
this.filename = filename;
if (!any_test_you_need)
throw new IOError.FILE_NOT_FOUND("Requested file could not be found.");
}
}
2009/6/16 Sam Danielson <samdanielson gmail com>:
What should I do in a construct block when the normal thing would be
to throw? Can object instantiation be stopped by an error like in C++
or is the vala way to let construction continue and then set a zombie
flag?
Maybe a static method that creates an object, checks a zombie flag,
and then throws if true could masquerade as the actual constructor.
That's what I would do but it almost seems like a workaround.
Forgive me for having very little experience with both C# and GObject
and therefore lacking the ability to infer something so simple. Is
there a preferred way to signal a failed constructor to the caller?
Here is an example of what I'm talking about.
errordomain IOError {
FILE_NOT_FOUND
}
class Foo : Object {
string filename { get; set; }
public bool failed;
private Foo.with_file_ (string filename) {
this.filename = filename;
}
public static Foo with_file (string filename) throws IOError {
var foo = new Foo.with_file_ (filename);
if (foo.failed) throw new IOError.FILE_NOT_FOUND("Requested file
could not be found.");
return foo;
}
construct {
this.failed = true;
}
}
void main () {
try {
var foo = Foo.with_file ("test");
message ("ok");
}
catch {
message ("error");
}
}
_______________________________________________
Vala-list mailing list
Vala-list gnome org
http://mail.gnome.org/mailman/listinfo/vala-list
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]