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
两个都需要设置
c#与IronPython Clojure-clr的调用的更多相关文章
- Lua与.net的CLR相互调用
工程环境搭建: 下载luainterface-1.5.3.zip文件,使用到的dll为Built目录下的LuaInterface.dll.lua51.dll.luanet.dll LuaInterfa ...
- 类型,对象,线程栈,托管堆在运行时的关系,以及clr如何调用静态方法,实例方法,和虚方法(第二次修改)
1.线程栈 window的一个进程加载clr.该进程可能含有多个线程,线程创建的时候会分配1MB的栈空间. 如图: void Method() { string name="zhangsan ...
- CLR如何调用虚方法、属性和事件
方法代表在类型或类型的实例上执行某些操作的代码.在类型上执行操作,称为静态方法:在类型的实例上执行操作,称为非静态方法.任何方法都有一个名称.一个签名和一个返回值(可以是void). CLR允许一个类 ...
- IronPython调用C# DLL函数方法
C# DLL源码 using System; using System.Collections.Generic; using System.Text; using System.Security.Cr ...
- Clojure上手
Clojure,这是什么鬼?一门基于JVM(现在也有基于.NET CLR的了:Clojure CLR) 的函数式编程语言.在JVM平台运行的时候,会被编译为JVM的字节码进行运算..为什么要学它?其设 ...
- IronPython .NET Integration官方文档翻译笔记
http://ironpython.net/documentation/dotnet/这是原文地址 以下笔记仅记录阅读过程中我认为有必要记录的内容,大多数都是依赖翻译软件的机翻,配合个人对代码的理解写 ...
- 在Java中调用Python
写在前面 在微服务架构大行其道的今天,对于将程序进行嵌套调用的做法其实并不可取,甚至显得有些愚蠢.当然,之所以要面对这个问题,或许是因为一些历史原因,或者仅仅是为了简单.恰好我在项目中就遇到了这个问题 ...
- 几分钟内学习 Clojure
1.基本例子 ; 分号作为注释的开始 ; Clojure 用一种把元素用括号括起来的像列表一样的方式来书写,元素之间用空格隔开 ; clojure 解释器会把第一个元素当做是函数或者宏调用,其他的都作 ...
- C#_技巧:.net下C++调用C#的dll
C#编译一个dll,比如命名空间为Csharp,里面有个类A,字段x,产生一个Csharp.dll C++ 配置,让C++支持CLR C++调用方法: #include <iostream> ...
- Clr Via C#读书笔记---垃圾回收机制
#1 垃圾回收平台的基本工作原理: 访问一个资源所需的具体步骤: 1)调用IL指令newobj,为代表资源的类型分配内存.在C#中使用new操作符,编译器就会自动生成该指令.2)初始化内存,设置资源的 ...
随机推荐
- nginx 场景业务汇总 (初)
本文链接:http://www.cnblogs.com/zhenghongxin/p/8891385.html 在下面的测试中,建议每次修改nginx配置文件后,都用此命令检查一下语法是否正确: [r ...
- P3175 [HAOI2015]按位或
传送门 一如既往膜拜shadowice巨巨 前置姿势我就没一个会的-- //minamoto #include<bits/stdc++.h> #define R register #def ...
- sublime text 另一种对齐
效果如下: http://sublime-text-unofficial-documentation.readthedocs.org/en/latest/extensibility/plugins.h ...
- C++中将二维数组(静态的和动态的)作为函数的参数传递
在C++编程中,我们经常将数组作为参数传递到另一个函数,数组的维数不同,传递方式也不同,此处将作一个总结,包括一维静态.动态数组,二维静态.动态数组. 一,一维数组(静态.动态一维数组) 1, 一维数 ...
- 近期js
1 var value1 = 0, value2 = 0, value3 = 0; for ( var i = 1; i <= 3; i++) { var i2 = i; (function() ...
- Java并发编程之volatile的应用
在多线程的并发编程中synchronized和volatile都扮演着重要的角色.volatile是轻量级的synchronized,它在多处理器的开发中保证了共享变量的可见性,可见性的意思是当一个线 ...
- 快速滑动时 `cellForRow` 的调用次数
问题 有一个 1000 个 cell 的 tableView,刚刚进入界面时,contentOffset 为 0.用手快速滑动 tableView,直至最下面一个 cell 显示在屏幕上. 这个过程中 ...
- 为什么程序员老在改 Bug,就不能一次改好吗?
程序员的日常三件事:写Bug.改Bug.背锅.连程序员都自我调侃道,为什么每天都在加班?因为我的眼里常含Bug. 但是真的有这么多Bug要改吗?就不能一次改完吗? 程序员听这问题后要拍键盘了,还!真! ...
- 页面按钮埋点+跟踪location.search
<a href="javascript: void(0)" onclick="setUrl('https://baoxian.pingan.com/pa18shop ...
- Mac 10.12允许任何来源
sudo spctl --master-disable 然后即可设置.
