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方法)。
答案 0 :(得分:0)
attr_reader
只是创建一个这样的方法:
def masterPassword
@masterPassword
end
所以你要么必须在session
中访问正确的类实例变量(例如@masterPassword
),要么放弃使用attr_reader
并编写自己的访问者:
def masterPassword
@@masterPassword
end
除非您碰巧ActiveSupport提供了cattr_accessor
,cattr_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。