`
prec
  • 浏览: 65397 次
  • 性别: Icon_minigender_1
  • 来自: 互联网
最近访客 更多访客>>
社区版块
存档分类
最新评论

IronRuby初探——在C#中调用Ruby代码

阅读更多

首先引入相关DLL:Microsoft.Scripting.dll 和Ruby.dll

然后我们新建一个类:

public class Class1
    
...{
        
public ScriptModule test(string path)
        
...{
           
            SourceUnit unit;

            
string name = "rubytest1";
            unit 
= new SourceFileUnit(RubyEngine.CurrentEngine,path, name, Encoding.UTF8);
            

            ScriptModule m 
= unit.CompileToModule();
            
            m.Execute();
            
return m;
        }

    }

然后,我们就可以通过,下面的代码执行RUBY文件的代码,并查看结果了:

protected void Page_Load(object sender, EventArgs e)
    
...{
        StringBuilder builder 
= new StringBuilder();
      
        
using (StringWriter output = new StringWriter(builder))
        
...{
            TextWriter console_out 
= Console.Out;
            ScriptEnvironment.GetEnvironment().RedirectIO(
null, output, null);
            
try
            
...{
                
new Class1().test(@"F:\test.rb");
            }

            
finally
            
...{
                ScriptEnvironment.GetEnvironment().RedirectIO(
null, console_out, null);
            }

        }

        
string actualOutput = builder.ToString();
        Response.Write(actualOutput);
        
    }

比如test.rb:

puts "test"

这个是最简答的RUBY代码了,我们也可以结合.NET CLR,比如:

require 'mscorlib'

= System::Text::StringBuilder.new
b.Append 
1
b.Append 
'-'
b.Append true
puts b.to_string
puts b.length

这反应了IronRuby的特色。

 

当然,我们也可以在代码里执行指定的代码而不是从文件:

public void test2() ...{
            ScriptModule module 
= ScriptDomainManager.CurrentManager.CreateModule("rubytest2");
            module.SetVariable(
"test""this is a test");

            RubyEngine.CurrentEngine.Execute(
"puts test", module);

}

 

protected void Page_Load(object sender, EventArgs e)
    
...{
        StringBuilder builder 
= new StringBuilder();
      
        
using (StringWriter output = new StringWriter(builder))
        
...{
            TextWriter console_out 
= Console.Out;
            ScriptEnvironment.GetEnvironment().RedirectIO(
null, output, null);
            
try
            
...{
                
new Class1().test2();
            }

            
finally
            
...{
                ScriptEnvironment.GetEnvironment().RedirectIO(
null, console_out, null);
            }

        }

        
string actualOutput = builder.ToString();
        Response.Write(actualOutput);
        
    }

上面实现了动态建立了一段代码并且从C#给RUBY代码赋值,并显示的过程。

不只是可以输出结果,我们也可以动态地监视他们:

object val = module.LookupVariable("test");

我们也可以直接来执行表达式:

object x = RubyEngine.CurrentEngine.Evaluate("1 + 1");

或者以一种IRB的交互方式:

object x = RubyEngine.CurrentEngine.ExecuteInteractiveCode("1+1");

好了,就简单地介绍到这里,更多更复杂的应用还要等待我们的正式版的推出。

分享到:
评论

相关推荐

    [IronRuby] C# 4.0调用ActiveRecord

    从提供的文件信息中,我们可以得知这篇博文主要讨论的是如何使用C# 4.0调用IronRuby中的ActiveRecord功能。不过由于博文链接和部分详细内容无法提供,知识点将基于文件信息部分和公共知识构建。 知识点一:IronRuby...

    ASP.NET源码——[博客空间]IronRuby博客中文版 Alpha.zip

    在这个【博客空间】IronRuby博客中文版中,我们可以期待找到关于如何在ASP.NET环境中使用IronRuby的详细教程、示例代码和可能的案例研究。这些内容可能包括: 1. **环境配置**:如何安装和配置IronRuby,以及如何...

    c#中使用动态类的样例程序

    在C#编程语言中,动态类型提供了一种在运行时确定类型的灵活性,这在处理诸如与.NET Framework的动态语言互操作或使用不完全已知结构的API时特别有用。动态类是这种特性的体现,它允许我们在编译时无需知道全部细节...

    C#利用MSScriptControl调用脚本实例

    在实际项目中,除了MSScriptControl,还有其他替代方案,如使用Microsoft的ChakraCore库执行JavaScript,或者使用IronPython或IronRuby等托管的脚本引擎执行Python或Ruby代码。这些现代的解决方案通常提供更好的性能...

    Sams.IronRuby.Unleashed.Feb.2010.pdf

    2. **与.NET的深度融合**:IronRuby可以调用任何.NET库,这意味着开发者可以在Ruby代码中直接使用.NET框架提供的强大功能,如数据库访问、Web服务、图形界面等。 3. **性能优化**:虽然动态语言通常被认为比静态...

    IronRuby博客中文版_多用户博客空间源码下载.rar

    开发者可以通过阅读源码学习到如何在Ruby on .NET环境中构建这样的应用,包括如何利用IronRuby的特性来编写高效、可维护的代码。 5. **Alpha版本**:"IronRuby博客中文版 Alpha_ironruby-pre-alpha1"表明这是软件的...

    c#4.0编程 源代码

    虽然完整的async/await语法在C#5.0中引入,但C#4.0的Task已经为异步编程奠定了基础,使得开发者能够更优雅地处理后台操作,避免阻塞主线程。 此外,源代码中可能还包括对.NET Framework 4.0中的其他组件和类库的...

    c# 4.0新特性一览

    在C# 4.0中,动态方法调用会进行动态调度,这意味着在运行时确定最合适的实现。同时,调用站点缓存可以存储之前的成功调用,提高性能。 通过这些新特性,C# 4.0不仅提升了与动态语言的交互能力,还增强了代码的灵活...

    C#中的动态类型(Dynamic)的项目工程

    C#的动态类型可以很好地与基于DLR(Dynamic Language Runtime)的语言如IronPython、IronRuby集成,使得在C#代码中调用这些动态语言的函数变得简单。 七、实例分析 以下是一个简单的动态类型使用示例,展示了如何...

    C#动态执行与编译

    在C#编程中,动态执行和编译是一个关键特性,它允许程序在运行时动态地创建、编译和执行代码。这种能力对于实现高度灵活和适应性的系统非常有用,例如插件架构、脚本系统或者根据用户输入生成代码的情况。在本主题中...

    [博客空间]IronRuby博客中文版 Alpha_ironruby-pre-alpha1(ASP.NET源码).rar

    1. IronRuby基础:介绍IronRuby的历史、特点、安装和配置方法,以及如何在.NET环境中运行Ruby代码。 2. ASP.NET MVC简介:解释MVC模式的基本原理,包括模型、视图和控制器的作用,以及它们之间的交互。 3. ...

    C#4.0权威指南电子书

    在C# 4.0中,`async`和`await`关键字使编写并发和异步代码变得更加直观,极大地改善了用户体验,因为程序可以在等待I/O操作完成时继续执行其他任务。 除了上述特性,C# 4.0还包括对泛型、集合、委托和事件的增强,...

    Ruby语言的简单介绍及代码实现

    - **IronRuby**:运行在Microsoft .NET框架上的Ruby实现,为.NET开发者提供了使用Ruby的机会。 这些变体不仅拓宽了Ruby的应用范围,也为开发人员提供了更多的选择。 ### 代码示例解析 下面通过一段Ruby代码来...

    Sams.IronRuby.Unleashed.Feb.2010.rar

    3. **IronRuby集成**:IronRuby是.NET Framework的一部分,它允许Ruby代码与.NET环境无缝交互。开发者可以使用.NET的类库,同时利用Ruby的简洁语法,这对于跨语言开发和团队合作具有很大的优势。 4. **元编程**:...

    Ruby中文文档.zip

    Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言,在20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发,遵守GPL协议和Ruby License。它的灵感与特性来自于 Perl、Smalltalk、Eiffel、Ada以及 Lisp ...

    无涯教程(LearnFk)-Ruby教程完整离线版.pdf

    另外,Ruby的“Here Document”特性是构建多行字符串的一种独特方式,它允许在代码中直接嵌入字符串,这对于格式化输出和配置信息尤为有用。 Ruby的环境设置相对简单,尤其是在Linux/Unix和Windows平台上。Ruby官方...

    Visual C# 2010从入门到精通源码-John Sharp著

    8. **动态编程**:C# 4.0引入了dynamic关键字,允许在运行时动态绑定对象和调用成员,与IronPython、IronRuby等动态语言更好地集成。 9. **单元测试与调试**:Visual Studio 2010提供了强大的单元测试工具和调试器...

    IronRuby开发包(Pre Alpha1)

    IronRuby 是 Ruby 编程语言在微软 .NET 平台上的一种实现。 IronRuby 与 Wilco Bauwer 的 IronRuby project 同名,2007年4月30日由微软于 MIX 上发表。并计划于2007年的 OSCON 公开推出。 2007年8月31日,John Lam...

    ironruby-pre-alpha1.zip_pre

    5. **示例**:可能包含一些简单的Ruby程序,演示如何在.NET环境中使用IronRuby运行代码。 对于初学者,通过研究这个预alpha版本,可以深入理解Ruby语言的内部工作原理,以及.NET平台上的动态语言运行时(DLR)是...

Global site tag (gtag.js) - Google Analytics