从文件外部访问实例

时间:2016-04-12 06:37:15

标签: ruby class object import require

我有三个文件如下:

  • database.rb - 代表数据库
  • log.rb - 记录数据库中发生的事情
  • main.rb - 一个接受用户输入并从其他文件中调用函数的驱动程序

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商店数据
  4. -----BEGIN CERTIFICATE REQUEST----- MIID.... -----END CERTIFICATE REQUEST----- -----BEGIN RSA PRIVATE KEY----- MI... -----END RSA PRIVATE KEY----- 能够了解数据库中发生的事情

2 个答案:

答案 0 :(得分:1)

如果我正确理解了这个问题,只需将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

答案 1 :(得分:0)

如果您希望能够独立于main运行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