posted @ 2010-03-25 04:22 D.K. 阅读(5) 评论(0)  编辑

 

原文地址:http://www.codethinked.com/post/2008/07/24/Learning-Ruby-via-IronRuby-and-C-Part-3.aspx

上一次,我们讨论了构造器,实例方法,参数,在最后我们还稍稍涉及了点块(block)的概念。在今天的讨论中,我们将继续深入类的静态方法,以及更多关于参数的内容。我们还将结束条件以及循环语句的讲解。

首先,让我们很快地回顾下Person类中的静态方法。举一个简单的例子,我们来定义一个方法来返回Person对象的总数。在C# 中,我们的类看上去是这样的:

public class Person
{
    private static int instanceCount = 0;
   
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public Person(string firstName, string lastName)
    {           
        this.FirstName = firstName;
        this.LastName = lastName;
        instanceCount++;
    }   

    public static int InstanceCount()
    {
        return instanceCount;
    }
}

正如你所见,我们仅使用一个静态变量instanceCount来追踪实例的创建。因此,我们能够利用这个静态变量来获取实例的个数。在Ruby中,我们将有若干种不同的方法来达到这个目的一种方案是使用“self”来实现,另一种选择是用类名称,比如这里就是"person",来实现。在接下去的例子中,我们将会使用"self"的方法,当然你也可以尝试采用类名的方法:

class Person
    @@instance_count = 0
   
    attr_accessor :first_name
    attr_accessor :last_name
   
    def initialize(first_name, last_name)
        self.first_name = first_name
        self.last_name = last_name
        @@instance_count += 1
    end
   
    def self.instance_count
        return @@instance_count
    end
end

这里,相信你已经发现了在上一篇中我们定义的静态变量,并且进一步的,我们添加了对应的静态函数。很酷不是吗?看起来比C#简单许多了。让我们看一下如何调用吧:

puts Person.instance_count

好了,关于静态函数我们已经谈论了许多,接下来让我很快地向大家介绍Ruby中的函数传递吧。首先我们介绍一下Ruby中的默认参数机制。一直以来我都希望C#能够提供这样的功能,并且我已听过许多关于参数过载的抱怨,但一直以来我都未能真正解决它。如今,我想我找到了有效的方案!在Ruby中,我能在构造器中使用默认参数,示例如下:

def initialize(first_name = "John", last_name = "Doe")
    self.first_name = first_name
    self.last_name = last_name
    @@instance_count += 1
end

棒极了!如今,我能在不传递参数的情况下调用"new"了,就像这样:.

person = Person.new
puts person.first_and_last_name

正如我们预期,终端上将会打印出“John Doe”。为了在C# 中获得相同的效果,我们将定义三个构造函数:

public Person(): this("John", "Doe") { }
public Person(string firstName) : this(firstName, "Doe") { }
public Person(string firstName, string lastName)
{           
    this.FirstName = firstName;
    this.LastName = lastName;
    instanceCount++;
}

不算太糟,不是吗?但默认参数更体贴些

好了,现在让我们谈谈另一个关于参数的问题吧。Ruby中,hash是可做为list参数传递的。但由于我们还未谈过hash,因此先把它搁一边把,我们之后将会再讨论它。

好了,再来我们看一下boolean类型,在C#中,可按此声明: 

bool isValid = false;

而在Ruby中,因为类型是隐式的,我们可以这样做:

is_valid = true

那么,if语句该怎么办呢?C#中,如下例所示:

if (isValid){
    //do something
}

而Ruby 和此很类似:

if (is_valid)
    #do something
end

进一步的,Ruby提供了unless语句:

unless (is_valid)
    #do something
end

显而易见的,unless是if的反向,当且仅当is_valid为false时,unless中的语句才会执行。在C#中,如下:

if (!isValid){
    //do something
}

很有趣吧,不过Ruby远不止这点能耐!Ruby中,我们可以在put语句中加入if和unless,示例如下:

puts "It is valid!" if is_valid

很有趣吧,现在它读起来更像英语句子了,并且它的意思也更明显了。它将会在“is_valid”为真的时候输出"It is valid!" 。同样,我们可以使用unless

puts "It is not valid!" unless is_valid

接下来,我们讨论一下循环的问题。Ruby支持不同类型的循环机制,比如"while", "until", "do..while", "do..until", and "for".  C#中的循环,看上去如此:

for (int i = 1; i <= 10; i++){
    Console.WriteLine(i);
}

Ruby中是这样的:

for number in 1..10
    puts number
end

C#和Ruby在循环处理上最大的差异就在于典型的循环结构永远不会被用到!我并不想使各位困惑,但这就是事实。在Ruby中,每一个对象都有责任来处理自己的循环,因此,这里我们来介绍“each”方法

这看上去类似于C# 中的foreach:

foreach (string name in names){
    Console.WriteLine(name);
}

Ruby的代码如下:

names.each do |name|
    puts name
end

但如果你结合了Ruby优秀的range特性(C#也支持Range)你能这样来处理循环:

(1..10).each do |num|
    puts num
end

我们也可以这么做:

10.times do |num|
    puts num + 1
end

这里我们需要 "+ 1"是因为"times"方法起始于0。但它会执行10次。

好了,今晚我们就讲到这,在下一片中我们将继续讨论数组的相关话题。

posted @ 2008-09-09 02:42 D.K. 阅读(151) 评论(0) 编辑

声明:文章版权归原作者所有,转贴请标明原出处及本文地址,原文地址:http://www.codethinked.com/post/2008/07/21/Learning-Ruby-via-IronRuby-and-C-Part-2.aspx

上一次我们讨论了与变量有关的话题,涉及了全局变量,本地变量,以及实例变量和静态变量。在这次的文章中,我们将继续深入讨论ruby的类以及开始定义方法和解决参数传递。

但在开始前,我还是要先简单介绍一下输出命令,这可以使你在之后的学习中更为顺畅。在C#中输出语句为:

Console.WriteLine("My test value");

但在Ruby中:

puts "My test value"

很简单哈~现在你可以在终端输出你要的结果了,那么下面开始我们今天的学习

首先,让我们先以C#为例创建一个带构造器和方法的类:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public Person(string firstName, string lastName)
    {
        this.FirstName = firstName;
        this.LastName = lastName;
    }

    public string FirstAndLastName()
    {
        return String.Format("{0} {1}", FirstName, LastName);
    }
}

这里你应该注意到Person类有两个属性并且它们将在构造器里完成初始化。而后我们构造了一个方法,其将使用String.Format来返回first name 和 last name。那么Ruby呢?下面你可能就会对Ruby的简单而感到惊讶了~

class Person
    attr_accessor :first_name
    attr_accessor :last_name
   
    def initialize(first_name, last_name)
        self.first_name = first_name
        self.last_name = last_name
    end
   
    def first_and_last_name
        "#{@first_name} #{@last_name}"
    end
end

事实上,在Ruby中我们用arrtibute accessors来代替C# 中的properties.而后又特别创建了一个特殊的函数“initialize",它相当与一个构造器。在Ruby中我们调用此函数来初始化一个新的类实例,虽然在之后我们会介绍到你实际上并没有必要显示的调用它。接下来,我们介绍一下"first_and_last_name”函数,它将返回一个由first name和last name连接的串。注意,这里我们并没有定义它的返回类型,这是因为Ruby中所有变量都返回一个值而已,不论它是NULL或者是一个有效值。再者你会发现我们根本没有写返回语句,这是因为Ruby中将每一个语句都视作一个返回语句。最后一点,我们在string中直接使用了变量,这是Ruby的语法糖提供的便捷。

在C#中使用这个类会用到new运算符,例如: 

var person = new Person("Ted", "Smith");

而在Ruby中却是new函数:

person = Person.new("Ted", "Smith")

另一个C# 中有用的关键字是“params”,他用来向函数传递变量:

public string Concat(params string[] items)
{
    string result = "";
    foreach (string item in items)
    {
        result += item;
    }
    return result;
}

在Ruby中我们用“*”来完成同样的功能

def concat(*items)
    result = ""
    items.each do |item|
        result += item
    end
    result
end

实质上,Ruby的函数完成了同样的功能,并且其更易读。在C# 版本的示例中,我们用到了foreach语句来循环处理数组。而在Ruby中,我们利用each函数来处理每一个元素。Each函数可能看上去并不像一个函数,(译者著:你可以看到each函数并没有用到圆括号),但实质上,这是因为圆括号在Ruby中一般是可选的。

因此,如果圆括号可以省略,我们可以修改我们之前创建person类的例子如下:

person = Person.new "Ted", "Smith"

这样写,一点问题都没有,你完全可以这样做。但我为什么说这是“一般可选”的呢?这是因为,在有的情况下,例如你内嵌某个函数在语句中,如果省略了圆括号会导致二义性。比如:

person.concat(person.first_and_last_name, "test")

这时如果我们去掉括号:

person.concat person.first_and_last_name "test"

事实上,此时Ruby会试图将test作为person.first_and_last_name的参数,而实质上它是没有函数的,这就造成了一个错误的发生。因此,圆括号只是可选得,那么逗号呢,它是否也是可选的?让我们看个例子

person = Person.new "Ted" "Smith"

哈,如果我们试图这么做就会受到一个错误报告,它指明我们没有能够给person.new提供所需足够参数。那么它认为我们提供了几个参数呢?答案是一个,即“Ted"。那么参数传递是按数组形式传的吗?不是。事实上在Ruby中,"+"符号在字符串中是可选的,这就意味着,连接字符串可以有很多种方案,但我仍坚持使用+运算符。

正如我们先前提到的each函数,它的参数是什么呢?实际上,在"do"和"end"之间的内容就是它的参数。在Ruby中,这被称为一个block。作为C# 程序员,这个例子或许能让你更深刻体会:

items.each { |item| result += item }

把这作为一个action delegate,并使拓展的函数定义看上去像这样:

public void Each<T>(this IEnumerable<T> list, Action<T> func)
{
    foreach (T item in list)
    {
        func(item);
    }
}

现在我们可以在我们的C# 代码中调用它了

items.Each(delegate(string item) { result += item; });

当然我们也可以使用Aggregate function (also called Fold) 并且 Lambda syntax 能使它看起来更相似些。但我不想让你对block和lambda产生过多的困惑 ,因为他们根本不是一回事。不过不必担心,Ruby也有 lambdas!

好了,今晚就说到这。在下一节里,我们将会讨论控制结构并且再深入讨论block,他们都是十分重要的概念!

我希望这篇文章对你的学习有所帮助~

posted @ 2008-08-17 22:29 D.K. 阅读(1738) 评论(0) 编辑

 

在之前的文章中,我已经解释了如何获得IronRuby以及如何设置运行IR的问题。如果你还没有看过,快去看吧!

如果你同大部分的C# 程序员一样,你最近可能已经听过许多关于动态语言,比如Ruby和Python的消息。如果你作为一个web开发者,很可能你已经用动态语言进行过开发了。当然我指的是javascript。如果javascript是动态语言的话,你一定会认为动态语言没什么大不了的。正如同大多数的C#程序员而言,你并非一个javascript的fans。当然这是有很多原因的,但我认为最主要的还是因为浏览器平台的差异性以及程序语言范式和我们过去所知的截然不同造成的。

Ruby没有这些问题。它有着一个标准的实现,这是IronRuby的目标,同时它有着同C# 类似的面向对象的特点。在这个系列了,我想通过一些示例展现如何将你的C#技巧运用于Ruby中。同时我希望你了解到Ruby的强大以及你可以用Ruby干些什么。

要说明的是,我并非一个Ruby专家,我在此只是与你们分享我的学习经验。如果我有什么说的不对的或不清楚的,还请告知我,我会及时修正它们的。

在我们开始之前,我们先考虑一个问题什么是动态语言?动态语言是一种运行于解释环境之下,并在运行期间才去完成静态语言在编译期就能完成的工作。因此,程序能够很随意地进行改动。很多人认为这应该属于一种Metaprogramming(译者:元编程?)。如今,动态语言这个词汇会有一些模糊,但我认为你将会随着深入学习Ruby而理解它。

下面,让我们从基础开始介绍。没有什么比变量来的更容易了,在C#中一个本地变量被这样声明:

int count = 1;

注意,你要设定类型,名称,值,而在Ruby 中

count = 1

是的,正如你看到的,它并没有类型信息。这是因为Ruby是一种动态语言,而且拥有动态类型。这已为这任何类型都是隐性的。因此当我们把“1”赋值给“count ”它就是个数字,如果我们用"abc“赋值,它就是个字符串,就像这样:

count = 1
count = "abc"

这段代码在Ruby中是完全合法的。我们可以重新赋值已改变变量的类型。至于这是不是一个好的实现就是另一回事了。在C#中,一切都被要求封装于类中,但Ruby并不需要这样。因此,Ruby可以拥有全局变量,使得其他文件也能访问到它。就像这样:

$count = 1

美元符号表明这个变量是一个全局变量。Ruby遵循这样一个准则,利用前缀来作为访问修饰符。接下来的两个类型变量将会是我们要讨论的“类”,这里我会向你演示快捷的类声明,但首先我们看一下C# 下的声明:

public class Person
{
}

Ruby中是这样的:

class Person

end

C# 中我们能在class中声明两类变量, instance 和static. 正如你所知, instance 变量记录了类实例的一个唯一的值,而 static 变量则是一个对于所有示例保持同一值得变量。C#例子如下:

public class Person
{
    protected int count;
    protected static int count2;
}

在Ruby里:(注意: Ruby的static变量通常指 "class variables"):

class Person
    @count
    @@count
end

另一件你必须注意的事是Ruby的变量是无类型的恶。这是因为,Ruby 的类和实例变量按照设计就不允许外部类访问。我在C#中用了protected修饰符,因为ruby的实例变量可以被继承类访问,实际上ruby中根本没有私有的实例或者类变量。为了能让外部访问变量,你必须指定get,set函数来处理他们。可能现在你会发现这是多么的痛苦,让你不禁回想起了JAVA ~但没必要感到害怕,ruby提供了更为简便的方法来达到目的。就像C#3.0,我们最终有了那极棒的automatic properties:

public class Person
{
    public int Count { get; set; }
    public static int Count2 { get; set; }
}

Ruby提供了一个方法允许我们通过调用“attr_accessor"来定义属性,这个方法只对实例变量有效:

class Person
    attr_accessor :count
    @@count2 = 0

    def count2
        @@count2
    end

    def count2=(value)
        @@count2 = value
    end
end

好了,正如你所见我们已经定了一个访问我们静态变量的方法,但我们仅需一行代码来声明我们的实例变量和方法来访问变量。你也许会注意到一件事,attr_accessor后紧跟着count。这就是Ruby中所谓的Symbol. 它允许我们通过名称来进行扶着。在此例中,attr_accessor仅是简单的一个方法。在这个方法中我们我们用symbol的名称创建了一个实例变量,同时get和set方法也是用这个名称。这同样也可以通过传递一个string来实现,虽然比较低效。

今晚,我想就先写这么多。你应该已经知晓如何声明变量,类,类中变量。在下一篇中,我们将会充实我们的类并增加一系列数据操作。

posted @ 2008-08-03 22:24 D.K. 阅读(1552) 评论(1) 编辑

声明:这篇文章的原文出自José M. Aguilar的Variable Not Found,这里仅对其进行中文转译工作,一切版权归原作者所有

以下将会介绍13给有用的TIPS供你参考注释代码,借此你可以很容易的维护理解你的代码:

1、分级注释

对于每一个代码块,每一级代码都进行统一风格的注释,例如:

=>对于每一个class,注释应该包含简介,作者,和最后修改日期

=>对于每一个方法,注释应该包含方法的目的,功能,参数,返回值的简介

团队工作中统一风格的注释显得格外重要。当然,我们能够接受也推荐使用代码注释工具(例如xml in c#或者javadoc for java)来简化这项任务。

2、段注释

我们可以用注释来将代码块分解成多个“段”,每一个段完成一个单一的任务。段注释将会在段起始处说明段内代码的功能,使阅读者明确接下去代码的功能。

// Check that all data records
// are correct
foreach (Record record in records)
{
    if (rec.checkStatus()==Status.OK)
    {
        . . .
    }
}
// Now we begin to perform
// transactions
Context ctx = new ApplicationContext();
ctx.BeginTransaction();
. . .

3、对齐的连行注释

对于多行连续代码的尾部注释,将注释对齐将会方便阅读者的阅读

const MAX_ITEMS = 10; // maximum number of packets
const MASK = 0x1F;    // mask bit TCP

一些程序员习惯用tab来对齐注释,然而其他人却喜欢用空格。因为tab的占位是取决于不同IDE的,而空格则没有这个问题,因此最佳的方法是使用空格。

4、不要侮辱读者的智慧

要避免对功能显而易见的代码进行注释,比如:

if (a == 5)      // if a equals 5
    counter = 0; // set the counter to zero

这不仅浪费你的时间去写这些毫无意义的东西,而且这些显然能从代码中推断出的“细节”还扰乱了读者的思路。

5、请礼貌些~

避免粗鲁的注解,比如“那些愚蠢的家伙输入了个负数”或者“这修正了那些可悲又愚蠢的程序员最初实现的副作用”。这些注释将给作者带来不必要的麻烦,你根本不知道将来谁会来阅读你的代码:你的老板,你的客户,或者是那些你刚侮辱的“可悲”程序员。

6、一针见血

请不要写过多的废话来表达你的思想。要避免使用ASCII ART,笑话,诗歌,hyperverbosity(译者注:天哪,谁会去写这些诡异的东西?)。总而言之,保持你注释的简单,明了。

7、统一的风格

一些人认为注释的一种作用是让非程序员来读懂代码。而另一些人认为注释仅仅是服务于程序员的。在任何情况下,正犹如Successful Strategies for Commenting Code中所说,最终要的是注释风格要连贯 ,并且面向统一的阅读者。就我个人而言,我很怀疑那些非程序员会去阅读我们的代码,因此注释应该服务于程序员。

8、为团队服务的特殊标记

当我们团队协作时, 常会用一些特殊的标记来交流。比如,很多团队用"TODO:"标记来说明这段代码需要补充额外的工作:

int Estimate(int x, int y)
{
    // TODO: implement the calculations
    return 0;
}

这些标记并非用来解释代码,而是作为讯息发布的工具。但是,请记住这一点,当你利用这些标记工作时,请确切地理解标记的含义,并且去完成标记隐含的需要你做的工作。

9、边CODE边注释

在编写代码的同时完成注释,这有助于你时刻了解自己在干什么。如果你把这项工作放到最后,你不得不痛苦地做第二次的“编码”工作。“我没有时间写注释”,“我很忙”,“项目进度已经晚了”都是我们常用的理由来搪塞注释的编写工作。一些程序员认为应该在CODE前就开始注释的编写,这有助于对程序有一个总体的计划。例如:

public void ProcessOrder() 
{
    // Make sure the products are available
    // Check that the customer is valid
    // Send the order to the store
    // Generate bill
}

10、为自己而写

当写代码时,请好好考虑,你不单单是为那些将来维护你代码的程序员写注释,同时也是为你自己。用伟大的Phil Haack的话来说:

‘当一行代码出现在屏幕上时,你就已经处于维护这行代码的状态下了’("As soon as a line of code is laid on the screen, you’re in maintenance mode on that piece of code.")

因此,你自己将会是自己那些优秀(糟糕)注释的第一个受益者(受害者)。

11、更新代码的同时更新注释

如果代码并没有改变,那么注释也就没有必要进行修改。但是代码与注释是一体的,两者要保持同步的更新,否则维护者将会发现读懂你的代码是一项极其痛苦的工作。这里要注意那些重构工具,它们常常为你更新了代码却留下了一堆不知所谓的注释。

12、黄金准则:可阅读的代码

一条程序员的基本准则是:让你的代码自己解释自己。虽然有人质疑那些不愿意写代码的程序员提出这项原则的动机,但那些可自解释的代码的的确确能够很好的解释程序,并且使得注释毫无用武之地。比如,在我的Fluid Interfaces 这篇文章中表现了自解释代码是多么地清晰易懂:

Calculator calc = new Calculator();
calc.Set(0);
calc.Add(10);
calc.Multiply(2);
calc.Subtract(4);
Console.WriteLine( "Result: {0}", calc.Get() );

在这个例子中,注释是没有必要的并且是有悖于TIP 4的。为了写出可阅读的代码,你应该要使用那些合适的变量名,保证正确的缩进,以及采用编码样式指导(coding style guides)。如果没能做到这一点,你就不得不为你那些糟糕的代码负责了~

13、与你的同事分享这些TIPS

虽然TIP 10说明了我们自己能够从优秀的注释中获益良多,这些TIPS同样有益于你的同事们,特别是与自己一同工作的团队成员。因此,和你的同事们自由得分享这些TIPS, 你会发觉代码是多么得容易编写与维护。

posted @ 2008-07-30 09:38 D.K. 阅读(112) 评论(0) 编辑

原文地址:http://www.codethinked.com/post/2008/07/14/Getting-IronRuby-Up-and-Running.aspx

 

在这片文章中,我想简单地介绍一下IRONRUBY的安装配置以及如何运行示例。通常而言,我是一个玩弄C#的人,而且这个BLOG大多数时候本身就关于C#,但我想接触动态语言是十分重要的。因为.net已经开始逐步走向动态化(其拥有IronPython,Boo,IronRuby,和VB.net 10),所以我想作为程序员应该开始逐步去了解更多关于动态语言的知识。正处于这种目的,我写下了这个系列。(译者注:此处省略了一些无关的话题)

这个教程可能节奏比较慢,但我想确保对于绝大多数人而言都能看懂。

OK,我们开始:

第一步是最简单的,你只需点击这个链接:http://www.ironruby.com/

IronRuby

 

在那你会找到一个指向RubyForge.org的一个链接:http://rubyforge.org/projects/ironruby

RubyForge 

在RubyForge那,你将找到一些文件,此时你有必要先安装TortoiseSVN来获取他们。如果你没有TortoiseSVN,请到这里下载http://tortoisesvn.net/downloads

第二步是用Tortoise来获取代码,首先新建一个文件夹

IronRuby folder 

然后右键点击选择"SVN Checkout..."

SVN Checkout

 

当checkout对话框弹出后,我们在svn的url链接处填写地址:

svn://rubyforge.org/var/svn/ironruby

IronRuby Get

  

好了,现在安静地休息一会等待下载的完成。这东西不是一般的大,因此究竟要等对久完全取决于你的网速。当它结束后,画面如此:

IronRuby Get Done

 

当你得到源码后你需要重新设置你的vs2008。如果你没有vs,你可以从这里得到:http://www.microsoft.com/express/download/

之后浏览到你下载源码的目录,这里我是下载到了C:\development\Ruby\IronRuby\. 你可以看到我们有一个"trunk"文件夹,这是源码的一部分。然后打开 IronRuby.sln.

image

 

你将会收到一个关于Microsoft.Scripting.Core 的警告要求你自定义设置,因为它来自于微软,所以你只要让它正常加载就行了。

Security Warning

 

项目加载后,你会看到:

image

  现在你要做的就是生成整个工程,你会希望看到如下的画面:

image

为了使用IronRuby,你需要进入文件夹 \trunk\build\debug (这里假定你是用debug模式编译的). 你可以用以下命令来使用IR:

IronRuby command line

  

第一次运行时,你会得到一个FileLoadException告知你无法加载 ir

image

 

这是因为IronRuby项目被签名了,而且delay signing选项被选中了。如果你查看项目属性,你会在"Signing" tab下看到:

IronRuby Signing

 

好了,你要做的就是打开一个终端窗口,进入trunk文件夹。然后找到runfirst.cmd,这个文件包含了一些命令,其中一个叫做"sn -Vr *,31bf3856ad364e35". 这个命令将会使IronRuby项目跳过强名称检验

image

 

我第一次执行时,得到了如下信息:

image

这是因为sn.exe并不在我默认的path, 通过打开一个Visual Studio Command Prompt我解决了这个问题 (如果你使用Vista,点击右键选择 "Run As Administrator"):

image

  你需要管理员权限来执行一下操作

  image

   

但再一次的我又遇到了强名称检验的问题,我做了些研究终于发现毛病出在我使用64位系统上。因为默认的32位 sn.exe 已经使用了.64位版本的 sn.exe 在 "\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64". 因此,我用command prompt执行以下命令 command (确保运行于管理员权限下):

C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64>sn.exe -Vr *,31bf3856ad364e35

最终,最终。。。。。

image

好了,你终于能够用IR了,很简单,是不?

不!现在是你安装 alpha software的时候了!

现在让我们测试一下。先把Ironruby 添加到我们的 path. 在控制面板打开“系统”选择“高级”标签

System Properties

   你会在底部找到“环境变量”按钮:

image

   点击它,然后你会看到以下内容:

System Variables

  把你IR的路径添加进取,对我而言是';C:\development\Ruby\IronRuby\trunk\build\debug'.

现在你可以在任何目录下运行IR了.我再 'development\Ruby\' 下新建了一个HelloWorld文件夹,并创建了一个HelloWorld.rb文件.

HelloWorld

  命令行下,运行这个程序:

image

  好了,我们搞定这些了~你已经能够用它进行开发了。希望能够对你有所帮助!!

posted @ 2008-07-30 08:11 D.K. 阅读(1239) 评论(4) 编辑