Как вы ссылаетесь на переменную, добавленную в ScriptScope из IronRuby? - PullRequest
1 голос
/ 17 марта 2011

Я пытаюсь добавить переменную в область, а затем получить доступ к этой переменной из моего выражения ruby.

с #

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();

рубин

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

1 Ответ

4 голосов
/ 17 марта 2011

Вы были довольно близко. Просто измените две последние строки вашего кода C # на следующие:

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

Кроме того, хотя я не уверен, чего вы хотите достичь, вы можете использовать свой класс из C # более простым способом:

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

dynamic globalConstants = engine.Runtime.Globals;
dynamic person = globalConstants.Person.@new("shay");
person.sayHi();
...