Re: [Vala] How should I handle a constructor that fails?



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]