2011-04-13 85 views
6

我正在通過Moose食譜,我仍然無法看到我是否可以使用它創建私有變量和函數?可能嗎?如果是的話,如何與穆斯創建它們?如何使用Moose創建私有/公共變量和函數?

+2

如果您願意,可以查看MooseX :: Privacy,它是完成此操作的擴展。然而,私人方法並不是真正的私人方法,因爲它們會死亡,而不是在派遣中被跳過。 – 2011-04-13 13:20:06

+0

Perl不是Java。 – Ether 2011-04-13 14:51:09

回答

10

像daxim指出的那樣,私有方法有「_」前綴。由於屬性(實例變量)生成getter方法(如果RW也設定裝置的方法)開箱,你應該這樣做:

has 'myvariable' => (
    is  => 'ro', 
    writer => '_myvariable', 
    init_arg => undef, 
    # other options here 
); 

這樣你就可以設置你的類/實例中這個屬性和它的不可設置從外面。如果只讀訪問過多,您還可以將其標記爲「私有」:

has '_myvariable' => (
    is  => 'ro', 
    writer => '_set_myvariable' 
    init_arg => undef, 
    # other options here 
); 
10

_前綴一個標識符,以將函數/變量等標記爲私有。這在perlstyle的約範圍部分中有說明,大約在文檔的中間。

這是由理智的程序員和一些工具(源解析器/文檔)推崇的,但不是由編譯器強制執行。見perlmodlib#NOTE