我正在使用Daybreak库,这是一个键/值存储。
我打开它以执行任何操作:
db = Daybreak::DB.new $ShowDatabaseName
然后我做任何我想做的事,然后用它关闭它:
db.close
这似乎是我想要使用它的任何地方浪费的努力。在初始化中将它声明为类变量似乎更有效:
def initialize
@db = Daybreak::DB.new $ShowDatabaseName
end
这意味着我的课程的其余部分可以使用它而不必每次都初始化和关闭它,但后来我收到一条消息:
Daybreak database was not closed, state might be inconsistent
有没有更好的方法来处理重复和警告?
答案 0 :(得分:4)
使用块:
def use_db(database_name)
db = Daybreak::DB.new(database_name)
yield db
ensure
db.close
end
use_db($ShowDatabaseName) do |db|
# do something with db
end
答案 1 :(得分:2)
如果您希望(某种程度上)确保在程序完成时关闭数据库连接,请使用at_exit
块。因此,将您的连接存储为常量(您的变量是实例变量):
DB = Daybreak::DB.new $ShowDatabaseName
程序中的其他地方(任何地方)放置at_exit
块:
at_exit {
DB.close
}