2012-07-09 61 views
0

我想在全局的主腳本中使用創建的對象。Ruby:在不同的文件中使用的Class對象

爲前我已經在不同的ruby文件不同的文件和類

FileNameModA.rb

module A 
    # ........ 
    # some code here 
    # ........ 
end 

FileNameModB.rb

module B 
    # ........ 
    # some code here 
    # ........ 
    objReport.addReport() # getting an error "ruby uninitialized local variable or object: Main" 
end 

FileNameClass_Report.rb

class Report 
    def addreport() 
    end 
end 
不同的模塊

MainScript.rb

require "FileNameModA" 
require "FileNameModB" 
require "FileNameClass_Report" 

include ModuleA 
include ModuleB 

objReport = Report.New 

objReport.addReport() # Works fine here 

可否請你讓我知道如何創建和紅寶石的不同的文件/模塊中使用對象?

+1

哪個版本你在用Ruby嗎?要求語句在1.9和1.8中處理有點不同,在那裏你需要在1.9+中使用'require_relative'文件名'。 – KChaloux 2012-07-09 17:41:15

+0

你爲什麼期望'objReport.addReport()'在FileNameModB.rb中工作? – 2012-07-12 01:21:32

回答

2

當你require "FileNameModB"它執行模塊B的定義,該定義調用objReport.addReport不在這方面模塊定義的過程中存在通過調用addReport

我不知道什麼是你想實現,但你可以交換一些線路,使它像這樣的工作:

require "FileNameClass_Report" 
$objReport = Report.New 

require "FileNameModA" 
require "FileNameModB" # update your file to call $objReport.addReport 

include ModuleA 
include ModuleB 

整個事情看起來像一個爛攤子,雖然,嘗試重新考慮你的類/模塊,以避免包括他們到全局對象

+0

我使用Ruby(Watir)自動化應用程序。爲此,我將Main scirpt,Function library,report.rb和對象存儲庫放在不同的文件/文件夾中。 Report.rb有一個類但不是模塊,其他模塊中定義。在主腳本中,我創建了一個工作正常的報告類對象。但我想使用函數庫中report類中定義的函數。 – user1511989 2012-07-10 12:49:37

+0

我在說的是我不明白爲什麼你需要'將ModuleA包含到全局對象中 - 爲什麼不直接調用ModuleA的函數呢? – keymone 2012-07-10 14:03:20

相關問題