从文件外部访问实例
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
,因此我不能从那里也需要它)。我设置的完全错误吗?我该怎么做:
-
让
main
向database
和log
发送命令
有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
【讨论】:
以上是关于从文件外部访问实例的主要内容,如果未能解决你的问题,请参考以下文章
AIR for iOS、外部 swf(不允许使用字节码)可以使用实例名称访问舞台上的实例吗?