我在模块SingletonClass
Modulename
的实例
Modulename::SingletonClass.instance
具有哈希@hashname
。我在SingletonClass
上有一个方法,可以为@hashname
添加新密钥。
当我向@hashname
添加新密钥时,我可以通过在控制器中执行puts @hashname
来查看新密钥,但是当我在SingletonClass
中执行时,似乎是未添加新密钥。这是为什么?为什么我能够从控制器中看到@hashname
的更改,而不是单例类中的更改?
这是一个代码,它重现了我试图描述的行为:
module MyModule
module SubModule
class SingletonClass
include Singleton
def initialize
@items = {}
@items = MyMode.all.map{|c| {c.name => c.secondary_name}}.reduce(:merge)
end
def add_new_item(name, secondary_name)
@items[name] = secondary_name
end
def do_something
@items.each do |k,v|
ap "#{k} => #{v}"
end
end
def another_method
do_something
end
end
end
end
当我从我的控制器执行此操作时:
singleton = MyModule::SubModule::SingletonClass.instance
singleton.add_new_item('test', 'test1')
然后这也来自控制器:
singleton.do_something
新项目被打印出来以便它的好处。
但是当我从我的单身人士课程中调用another_method
时,似乎没有添加新项目
答案 0 :(得分:0)
当MyMode.all
返回值时,此代码适用于我。但是当它是一个空数组时,@items =
变为零。
[].reduce(:merge)
=> nil
最简单的修复方法可能是:
@items = {}
people = MyMode.all.map{|c| {c.name => c.secondary_name}}.reduce(:merge)
@items = people if people