从文件外部访问实例

Posted

技术标签:

【中文标题】从文件外部访问实例【英文标题】: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,因此我不能从那里也需要它)。我设置的完全错误吗?我该怎么做:

    maindatabaselog 发送命令 有database存储数据 让log 能够了解数据库中发生的情况

【问题讨论】:

【参考方案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

【讨论】:

以上是关于从文件外部访问实例的主要内容,如果未能解决你的问题,请参考以下文章

限制对 AWS SQL Server 实例的外部访问

AIR for iOS、外部 swf(不允许使用字节码)可以使用实例名称访问舞台上的实例吗?

如何在组件外部访问React Context?

Google Compute Engine 上的 Flask - 无法从外部/浏览器访问

从外部文件访问 Vue

从外部文件访问 codeigniter 会话值