2012-07-09 2 views
0

Je souhaite utiliser globalement l'objet créé dans le script principal.Ruby: objet de classe à utiliser dans un fichier différent

Ex je module différent dans un fichier différent et la classe dans un fichier différent rubis

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 

Pouvez-vous s'il vous plaît me faire savoir comment créer et utiliser l'objet dans un fichier différent/module Ruby?

+1

Quelle version de Ruby utilisez-vous? Les instructions requises sont traitées un peu différemment dans 1.9 et 1.8, où vous voudrez utiliser 'require_relative 'nom de fichier dans 1.9+. – KChaloux

+0

Pourquoi attendez-vous que 'objReport.addReport()' fonctionne dans FileNameModB.rb? –

Répondre

2

lorsque vous require "FileNameModB" il exécute la définition du module B et cette définition appelle objReport.addReport qui n'existe pas dans ce contexte

Je ne sais pas ce que vous essayez d'atteindre en appelant addReport lors de la définition du module, mais vous pouvez échanger quelques lignes et le faire fonctionner comme ceci:

require "FileNameClass_Report" 
$objReport = Report.New 

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

include ModuleA 
include ModuleB 

tout ressemble à un gâchis si, essayez de repenser vos classes/modules afin d'éviter de les inclure dans l'objet global

+0

J'automatise une application en utilisant Ruby (Watir). Pour cela j'ai le scirpt principal, la bibliothèque de fonction, le report.rb et le dépôt d'objet dans différent dossier/dossier. Report.rb a une classe mais pas de module et d'autres sont définis dans les modules. Dans le script principal, j'ai créé un objet de la classe de rapport qui fonctionne bien. mais je veux utiliser la fonction définie dans la classe report dans la bibliothèque de fonctions. – user1511989

+0

ce que je dis est que je ne comprends pas pourquoi vous devez inclure ModuleA dans l'objet global - pourquoi ne pas appeler les fonctions de ModuleA explicitement? – keymone

Questions connexes