类变量的attr_accessor

时间:2014-02-17 15:03:45

标签: ruby

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,但它似乎不起作用。

我谷歌搜索但我似乎不明白。所以,如果有人能用简单的术语解释我的问题及其解决方案(不使用getter和setter方法)。

2 个答案:

答案 0 :(得分:0)

attr_reader只是创建一个这样的方法:

def masterPassword
  @masterPassword
end

所以你要么必须在session中访问正确的类实例变量(例如@masterPassword),要么放弃使用attr_reader并编写自己的访问者:

def masterPassword
  @@masterPassword
end

除非您碰巧ActiveSupport提供了cattr_accessorcattr_reader,&amp; cattr_writer

另见Why should @@class_variables be avoided in Ruby?,为什么你应该只使用类实例变量。

答案 1 :(得分:0)

attr_reader不是读类变量,而是实例变量 - 你需要使用类实例变量:

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

请注意Ruby命名约定:它应该是password_manager_accound_id和类似的。 Ruby中没有lowerCamelCase。