Finally, a little digital extraction. Scala from IronPython, works as expected. In file operator.scala:
package com_ravnaandtines.operator trait Process { def op(x:Int, y:Int) : Int } class Multiply extends Process { def op(x:Int, y:Int) : Int = x * y } class Perform69 { def sixByNine(x: Process) = x.op(6,9) }
Set up as in the previous post, and build using %SCALA_HOME%\bin\scalac-net.bat operator.scala
to get operator.msil
-- no assembly is generated at this point. Edit the .msil file as required to point at the appropriate versions of the runtime (see previous post). Then ilasm .\Operator.msil /dll /output=operator.dll
. Now fire up IronPython:
>>> import clr >>> clr.AddReference("operator.dll") >>> from com_ravnaandtines.operator import * >>> dir() ['Multiply', 'Perform69', 'Process', '__builtins__', '__doc__', '__name__', 'clr'] >>> m = Multiply() >>> p69 = Perform69() >>> p69.sixByNine(m) 54 >>> class Adder(Process): ... def op(self,a,b): ... return a+b ... >>> add = Adder() >>> p69.sixByNine(add) 15 >>>
So long as we get our interfaces/traits from Scala, all is fine.
In order to do the same in the JVM world, I need to have done set CLASSPATH=%CLASSPATH%;C:\scala-2.7.1.final\lib\scala-library.jar
; and then I can do exactly as above, but without the first two lines with clr
. Those I can put in a try/except
, for common coding.
Note -- it is neither necessary nor sufficient to put the Scala library jar in java.class.path
or python.path
properties.
No comments:
Post a Comment