从文件外部访问实例

Accessing an instance from outside the file

我有如下三个文件:

database.rb

class Database
  def initialize()
      @data = Hash.new
      @modified_recently = false
  end

  def build_db
    # Reads CSV file into program
  end
end

main.rb

require_relative "./database"
require_relative "./log"

db = Database.new # Create a new database
log = Log.new # Create a new log
db.build_db # Build the database from a file

问题是我需要日志才能访问数据库。但是,我正在 main.rb 中创建对象(这需要 log.rb 因此我不能从那里也需要它)。我的设置完全错误吗?我怎样才能:

  1. maindatabaselog发送命令
  2. database存储数据
  3. log能够获取数据库中发生的事情

如果我理解正确,只需将 Database 的实例传递给 Log 的构造函数:

class Log
  def initialize db
    @db = db
  end
  ...
end

main.rb中:

db = Database.new # Create a new database
log = Log.new db  # Create a new log

如果您希望能够 运行 您的 database.rb 独立于您的主程序,例如为了测试,您还可以检查 main.rb 是否已经定义了日志

#database.rb
require_relative "./log" #is only going to be required once
db = Database.new
log = Log.new unless defined? log