2011-03-17 3 views
1

J'essaie d'ajouter une variable à la portée, puis j'accède à cette variable à partir de mon expression ruby.Comment référencer une variable ajoutée à un ScriptScope de IronRuby?

C#

ScriptRuntime runtime = IronRuby.Ruby.CreateRuntime(); 
var scope = runtime.ExecuteFile("C:\\codebase\\Test\\Test2\\Test2\\person2.rb"); 
scope.SetVariable("name", "Scott"); 
dynamic person = scope.Engine.Execute("p = Person.new(name)"); 
person.sayHi(); 

Ruby

class Person 
    def initialize(name) 
     @name = name.capitalize 
    end 
    def sayHi 
     puts "Hello #{@name}!" 
    end 
end 

Répondre

4

Vous étiez assez proche. Il suffit de changer les deux dernières lignes de votre code C# pour les prochains:

dynamic p = scope.Engine.Execute("Person.new(name)", scope); 
p.sayHi(); 

En outre, bien que je ne suis pas sûr de ce que vous essayez d'atteindre, vous pouvez utiliser votre classe de C# de manière plus facile :

var engine = Ruby.CreateEngine(); 
var scope = engine.ExecuteFile(@"C:\codebase\Test\Test2\Test2\person2.rb"); 

dynamic globalConstants = engine.Runtime.Globals; 
dynamic person = [email protected]("shay"); 
person.sayHi(); 
+1

J'ai supposé à tort que puisque vous appeliez Execute à partir de la portée, il aurait déjà tout ce qui est nécessaire dans la portée. Le truc globalConstants est cool aussi. C'est une façon plus simple d'appeler Ruby. – ScArcher2

Questions connexes