2014-02-17 87 views
-1
class User 
    class << self 
    attr_reader :passwordManagerAccountID 
    attr_reader :masterPassword 

    def session(passwordManagerAccountID , masterPassword) 
     @@passwordManagerAccountID = passwordManagerAccountID 
     @@masterPassword = masterPassword 
    end 
    end 
end 

User.session("sdsd" , "sdsd") 
User.passwordManagerAccountID #=> no output 
User.masterPassword #=> no output 

我想使用的類變量attr_reader但它似乎並沒有工作。attr_accessor對類變量

我谷歌搜查,但我似乎不明白。所以,如果有人能夠簡單地解釋我的問題及其解決方案(而不使用getter和setter方法)。

+0

這可能也已經在這裏得到解答:http://stackoverflow.com/questions/4370960/what-is-attr-accessor-in-ruby 你真的谷歌搜索此事先? –

回答

0

attr_reader只是創建這樣的方法:

def masterPassword 
    @masterPassword 
end 

所以你要麼必須訪問正確的類的實例變量session(如@masterPassword)或使用attr_reader放棄,寫自己的訪問:

def masterPassword 
    @@masterPassword 
end 

除非您碰巧有ActiveSupport它確實提供cattr_accessor,cattr_reader,& cattr_writer

另請參閱Why should @@class_variables be avoided in Ruby?爲什麼你可能應該只使用類實例變量。

+0

我知道區別,我想知道它是否可以使用類變量attr_access而不是實例變量。 像紅寶石在rails上我們可以使用cattr_accessor –

+0

@RushabhRajeshKumarPadalia No. –

+0

okya,所以我必須使用getter和setter方法? –

0

attr_reader不讀書類變量,但實例變量 - 你需要使用類的實例變量:

def session(passwordManagerAccountID , masterPassword) 
    @passwordManagerAccountID = passwordManagerAccountID 
    @masterPassword = masterPassword 
end 

請介意的Ruby命名約定:它應該是password_manager_accound_id和類似。 Ruby中沒有低級別的CamelCase。

+0

要小心說「Ruby中沒有低級別的CamelCase」。有,這不是常見的慣例。 Ruby語法/解釋器不關心,只有開發人員。 –

+0

好吧,不知道紅寶石的命名約定,thanx –