Hehe - well I can fish the contents of the library I required from engine.Runtime.Globals, which seems right as I'm requiring it in the global namespace. I'm still surprised the ScriptScope is empty.

Michael


Michael Foord wrote:
Ok, so setting the engine search paths solves the failure to find the library, but the ScriptScope is still coming back empty. In the example below I would have expected to see 'd' in the ScriptScope.

c:\Binaries\IronRuby\bin>ipy.exe interop.py
[]

From this code:

import clr
clr.AddReference('IronRuby')
clr.AddReference('Microsoft.Scripting')

from System import Array

paths = [r'C:\Binaries\IronRuby\lib\IronRuby', r'C:\Binaries\IronRuby\lib\ruby\1.8']
array = Array[str](paths)

source_code = "require 'date'\nd = Date::civil(2003, 4, 8)\n"

from Microsoft.Scripting import SourceCodeKind
from IronRuby import Ruby
engine = Ruby.CreateEngine()
engine.SetSearchPaths(array)
source = engine.CreateScriptSourceFromString(source_code, SourceCodeKind.Statements)
scope = engine.CreateScope()
source.Execute(scope)

print dir(scope)

Michael

2009/8/22 Michael Foord <fuzzy...@voidspace.org.uk <mailto:fuzzy...@voidspace.org.uk>>

    Hello all,

    I've played a little bit with IronPython and IronRuby interop with
    the IronRuby 0.9 binaries.

    A very basic example works as expected:

    IronPython 2.6 Beta 2 (2.6.0.20) on .NET 2.0.50727.4927
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import clr
    >>> clr.AddReference('IronRuby')
    >>> from IronRuby import Ruby
    >>>
    >>> engine = Ruby.CreateEngine()
    >>> source = engine.CreateScriptSourceFromString("puts 'Hello from
    Ruby'")
    >>> scope = engine.CreateScope()
    >>>
    >>> source.Execute(scope)
    Hello from Ruby
    >>>


    However my attempts to use a Ruby library fails. The same code
    works when executed from ir.exe:

    >>> import clr
    >>> clr.AddReference('IronRuby')
    >>> clr.AddReference('Microsoft.Scripting')
    >>>
    >>> from Microsoft.Scripting import SourceCodeKind
    >>> from IronRuby import Ruby
    >>> engine = Ruby.CreateEngine()
    >>> source = engine.CreateScriptSourceFromString("require 'date'",
    SourceCodeKin
    d.Statements)
    >>> scope = engine.CreateScope()
    >>> source.Execute(scope)
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    Exception: no such file to load -- date
    >>>

    I tried adding a reference to IronRuby.Libraries to the runtime
    associated with the Ruby engine (using runtime.LoadAssembly) but
    this didn't help.

    Requiring Ruby modules I've written myself doesn't blow-up but
    doesn't populate the scriptscope they are executed in with
    anything. Likewise calling engine.ExecuteFile('foo.rb') returns an
    empty ScriptScope.

    Any ideas?

    All the best,

    Michael Foord

-- http://www.ironpythoninaction.com/
    http://www.voidspace.org.uk/blog





--
http://www.ironpythoninaction.com/


------------------------------------------------------------------------

_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com


--
http://www.ironpythoninaction.com/
http://www.voidspace.org.uk/blog


_______________________________________________
Users mailing list
Users@lists.ironpython.com
http://lists.ironpython.com/listinfo.cgi/users-ironpython.com

Reply via email to