【问题标题】:Accessing an instance from outside the file从文件外部访问实例
【发布时间】:2016-08-02 14:18:29
【问题描述】:

我有如下三个文件:

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

数据库.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 能够了解数据库中发生的情况

【问题讨论】:

    标签: ruby class object import require


    【解决方案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
    

    【讨论】:

    • 啊;我没有意识到他们可以就这样通过。谢谢!
    • Everyhing 是 ruby​​ 中的一个对象,所以如果你可以给一个 Integer 作为参数,你也可以给一个你自己创建的任何对象的实例。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      • 1970-01-01
      • 2023-03-21
      • 2011-05-11
      • 1970-01-01
      相关资源
      最近更新 更多