从文件外部访问实例
Accessing an instance from outside the file
我有如下三个文件:
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
因此我不能从那里也需要它)。我的设置完全错误吗?我怎样才能:
- 让
main
向database
和log
发送命令
- 有
database
存储数据
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
我有如下三个文件:
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
因此我不能从那里也需要它)。我的设置完全错误吗?我怎样才能:
- 让
main
向database
和log
发送命令 - 有
database
存储数据 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