Perhaps a better way to do this is like this: string[] test = new string[3]; for (int i = 0; i < 3; i++) { try { test[i] = kf.get_string(group, key); } catch (KeyFile.Error error) { // Do nothing } } if (!test[0] && !test[1] && !test[3]) return false; What do you think? Sam On 11-10-30 07:04 AM, PCMan wrote:
Hi all, I started using Vala recently and I'm confused by exception handling in Vala. I'm quite used to write C/GObject code and handles GError. However, with exceptions, flow-control becomes quite different. For example, I'm reading values from a KeyFile. With C/glib, I can pass NULL GError* pointer to g_key_file_get_string() to ignore any errors. If the errors are not critical for my program, it's safe to ignore them all like this. str1 = g_key_file_get_string(kf, group, key, NULL); str2 = g_key_file_get_string(kf, group, key, NULL); str3 = g_key_file_get_string(kf, group, key, NULL); if( !str1&& !str2&& !str3) return FALSE; With Vala, I cannot do this. If I use try/catch, things are totally different. try { str1 = kf.get_string(group, key); str2 = kf.get_string(group, key); str3 = kf.get_string(group, key); } catch(KeyFile.Error error) { // If anyone of the preceding calls fails, we get here. // then I cannot continue getting the remaining strings from key file. } If get str1 fails, the excution jumps to catch() block, and I cannot continue reading str2 and str3. Of course I can do this: try { str1 = kf.get_string(group, key); } catch(KeyFile.Error error) { } try { str2 = kf.get_string(group, key); } catch(KeyFile.Error error) { } try { str3 = kf.get_string(group, key); } catch(KeyFile.Error error) { } Apparently, this looks even worse then its C/glib counterpart. So, how to ignore the GErrors/vala excaptions anyways? Thank you all. _______________________________________________ vala-list mailing list vala-list gnome org http://mail.gnome.org/mailman/listinfo/vala-list
Attachment:
smime.p7s
Description: S/MIME Cryptographic Signature