1

我正在使用 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

有没有更好的方法来处理重复和警告?

4

2 回答 2

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
于 2013-08-09T22:13:09.057 回答
2

如果您想(在某种程度上)确保在程序完成时关闭数据库连接,请使用at_exit块。因此,将您的连接存储为常量(您的变量是实例变量):

DB = Daybreak::DB.new $ShowDatabaseName

在你的程序的其他地方(任何地方)放置一个at_exit块:

at_exit {
  DB.close
}
于 2013-08-09T22:46:38.197 回答