2012-10-31 70 views
2

有沒有辦法在Vala中做如下的事情?vala需要setter/getter

public int year { 
    get { return this.year; } 
    set requires (1500 < value && value < 2050) { this.year = value; } 
} 
+1

技術上應該是可行的,但我不知道如果語法允許它。我會做的一個解決方法是用契約定義一個私有setter函數,然後在public setter中調用它。 – Ancurio

+0

如果語法不允許,這是一種遺憾。即使您的解決方法很乾淨,它仍然是一種解決方法。希望他們有一天會添加語法 – flatzo

+0

好吧,你可以隨時在他們的bug追蹤器上打開一個功能請求,甚至嘗試自己實現併發送一些補丁=)Vala仍在開發中。 – Ancurio

回答

1

沒有,但「需要」是GLib.return_if_failGLib.return_val_if_fail真的只是語法糖,所以你可以只是做:

public int year { 
    get { return this.year; } 
    set { 
     GLib.return_if_fail (1500 < value && value < 2050); 
     this.year = value; 
    } 
} 
+0

這是很好的知道!然而,令人失望的是,語法看起來比'require'更清晰。你在哪裏發現有關信息需要作爲GLib.return_if_fail的別名?從這兩個鏈接到GLib.return_if_fail和GLib.return_va_if_fail的Valadoc並不那麼冗長。 – flatzo

+0

我不知道它在任何地方都有記錄,我只是非常熟悉Vala和Vala之間的轉換方式。我同意語法支持看起來更好......如果您有時間,如果您將文件功能請求Vala的bug跟蹤器(https://bugzilla.gnome.org/browse.cgi?product=vala)。 – nemequ

+1

已經完成:https://bugzilla.gnome.org/show_bug.cgi?id = 687530 – flatzo