c#与IronPython Clojure-clr的调用

一,python

安装ironpython http://ironpython.net/

新建控制台程序,引入

IronPython,Microsoft.Scripting

新建xxx.py文件

var u = new User() { Name = "test" };
var engine = IronPython.Hosting.Python.CreateEngine(); 
var scope = engine.CreateScope();
var source = engine.CreateScriptSourceFromFile("python/xxx.py");
source.Execute(scope);
var fun = scope.GetVariable("welcome");
Console.WriteLine(fun(u));
 
加载了一个py文件,并且从中获取welcome这个方法,最后调用这个方法
传递的参数是一个c#类,需要在py中读取这个类的属性
 
import clr
clr.AddReference('cslib')
from cslib import *
def welcome(u):
    return "hello " + u.Name
 
我这里的User类是放在一个叫cslib的项目里的,所以需要加入cslib的引用
 
 
二,Clojure
 
安装 cloure-clr https://github.com/clojure/clojure-clr/wiki/Getting-binaries
nuget直接安装即可
新建一个add.clj文件
(ns test.add) 
(defn add [a b]   (+ a b))
 
RT.load("add");
var output = RT.var("test.add", "add");
var x= Convert.ToInt32(output.invoke(1, 2));
Console.WriteLine(x);
 
load对应文件名,var两个参数对应ns和方法名
向clj传递c#对象
var hello = RT.var("test.add", "hello");
hello.invoke(u);

在clj里引入

(System.Reflection.Assembly/LoadWithPartialName "cslib")
 
访问属性 使用 (.属性名 实例) https://github.com/clojure/clojure-clr/wiki/Basic-CLR-interop
(defn hello [u]  (print (.Name u)))
 
 
参考 
http://stackoverflow.com/questions/4380054/calling-clojure-from-net
https://github.com/rippinrobr/clojure-clr-intro
 
 
两个都需要设置
image
原文地址:https://www.cnblogs.com/czcz1024/p/3638664.html