??xml version="1.0" encoding="utf-8" standalone="yes"?>xxav国产精品美女主播,国产一二在线观看,国产一区二区黄http://www.aygfsteel.com/nbtymm/archive/2006/06/19/53738.htmlnbtnbtMon, 19 Jun 2006 04:04:00 GMThttp://www.aygfsteel.com/nbtymm/archive/2006/06/19/53738.htmlhttp://www.aygfsteel.com/nbtymm/comments/53738.htmlhttp://www.aygfsteel.com/nbtymm/archive/2006/06/19/53738.html#Feedback0http://www.aygfsteel.com/nbtymm/comments/commentRss/53738.htmlhttp://www.aygfsteel.com/nbtymm/services/trackbacks/53738.html 一些程序语aQ如C++和CLOSQ提供了多重l承机制Q一个类可以l承自多个超cR例如,一个House可能l承自一个Buildingc(q同Office和HospitalcMP和Residencec(q同ApartmentcMP。尽多重承可能成ZU语a强有力的特征Q但是由于它会增加该语言的复杂性和歧义Q因此许多面向对象语a都没有加入它?/font>

  Ruby支持单ѝ然而,它还提供了mixin-它提供了多承的许多特征。一个mixin是一U?模块"cd。ؓ此,你必首先理解在Ruby中模块的含义?/font>

  在Ruby中,模块是一U把Ҏ和常数分l的方式。它与类怼Q但是一个模块没有实例ƈ且也没有子类。也许解释模块的最好方法是举一个例子。假定你正在开发一个制造业应用E序。该E序需要存取大量的U学公式和常敎ͼ那么你可以或者是创徏一个通用cL把这些放在其中或者是创徏一个模块。模块的优点在于Q在存取其中的公式时Q根本没有Q何实例扰乱所带来的烦恹{?

module Formulas
ACCELERATION = 9.8
LIGHTSPEED = 299792458
def energy (mass)
mass*(LIGHTSPEED**2)
end
def force (mass)
mass*ACCELERATION
end
end
 

  现在Q这些公式方法和常数可以被Q何数目的其它cL其自w所使用Q?/font>

irb(main):046:0> Formulas.force(10)
=> 98.0
irb(main):047:0≫ Formulas::ACCELERATION
=≫ 9.8 


  注意Qؓ了调用一个模块方法或使用一个模块常敎ͼ你必M用类g调用一个类Ҏ的标志。ؓ了调用一个模块方法,你需要用模块类名,后面跟着一个点Q再跟着模块Ҏ名。ؓ了引用模块常敎ͼ你可以用模块名Q后面跟着两个冒号Q再跟着常数名?/p>

  除了作ؓҎ和常数的"公共"应用以外Q模块还可以帮助定义多重l承。一个mixin是一个简单的"包括"有一个类定义的模块。当一个类包括一个模块时Q所有的模块中的Ҏ和常数都成ؓcȝ实例Ҏ和常数。例如,假定上面定义的Formula模块作ؓ一个mixin被添加到RectanglecRؓ此,你要使用"include"关键字:

class Rectangle
include Formulas
end
 

  现在QRectangle的实例具有了它们可以使用的force和energyҎQƈ且Rectanglec能够访问常数ACCELERATION和LIGHTSPEEDQ?/p>

irb(main):044:0> class Rectangle
irb(main):045:1> include Formulas
irb(main):046:1> end
=> Rectangle
irb(main):047:0> Rectangle.new(4Q?).force(10)
=> 98.0
irb(main):048:0> Rectangle::LIGHTSPEED
=> 299792458 

  q意味着QmixinlRuby中的cd来了许多多重l承的优点,却避开了多重承中存在的问题?/p>

  十一?控制?/strong>

  象所有的E序语言一PRuby提供了一l控制流命oQ这包括条g语句(if/elsel构)Qcase语句和@环语?doQwhile和for)Q还提供了象Ada和Java{语a中的异常处理能力。下面是Ruby中的一些控制流语句的示例:

ifarea > 100
"big"
else
"small"
end
case height
| when 1
| print "stubby\n"
| when 2..10 #高度范围??0
| print "short\n"
| when 10..20 #高度范围??0
| print "tall\n"
| end
aRect = Rectangle.new(4Q?)
while aRect.area < 100 and aRect.height < 10
aRect.doubleSize()
end
for element in [2Q?.8Q?some string"Q Math::PI] #遍历对象集合
print "The type is: " + element.type.to_s + "\n&"
end 


  控制语句通常非常直接Q但是如前面的case语句和for循环语句所昄的,Ruby借鉴了其它一些语a特征和普通的面向对象的特性?br />异常处理cM于Java中的"try...catch...finally"语句。在Ruby中,它们更改?begin...rescue...ensure"语句Q?/p>

begin
#实现一些事?
rescue
##处理错误
ensure
#做一些清理工作,如关闭一个打开的文件等
end 

  Z在你的代码中引发一个异常,你只需要简单地调用raiseҎQ?/p>

if area < 0
raise
else if area > 0 and area < 10
raise "Rectangle too small"
else if area > 100
raise TooBigException "Rectangle too big"
end 

  W一个raise调用创徏一个RuntimeError。第二个raise创徏一个显CZ条消息的RuntimeError。最后一个raise调用一个TooBigException的新实例Q由它创Z个粗略定义的错误Q,q设|它的适当消息?/p>

  一个Ruby程?/strong>

  Z帮助你更好地掌握Ruby的基知识Q我在本文中提供了一个小E序供你学习之用。ؓ了ɘq个E序工作Q你可以下蝲q把该文件解压到你的文gpȝ。之后,它将创徏一个examples文g夹,在这个目录下共有9个Ruby代码文gQ?rb文gQ。本文中的代码就包含在这些文件中。另外,你会扑ֈ一个testShapes.rb文gQ它是测试Ruby的RectangleQSquare和Circle对象的主文g。只需单地打开一个命令提C符q运行testShapes.rb文g卛_?/p>

  你将注意刎ͼ在testShapes.rb和另外一些代码中Q文件以"require"再加上一个文件名开_象rectangle.rbQ。这是在你的RubyE序中加入或使用来自于其它文件代码的Ruby标志?/p>

  ȝ

  Ruby能否接管Java或C#而成Z界领先的C软g开发语aQ尽Ruby可能变得十分行Q但我对此仍抱有怀疑态度。作Z名在业界摸爬滚打多年的专业h员,我对其偶然性ƈ不感到惊Ӟ但我q是比较注重实效的。例如,我发现Smalltalk是一U比Java优越的高U语aQ然而优ƈ不会M赢。现代语a背后d在大量的技术和市场斚w的支持。库Q开发工具包Q框Ӟ架构Q连接器Q适配器,支持q_Q服务,知识库,能干的开发团队,{等Q都会被配置C以支持象Javaq样的程序语a。ƈ且,无论你喜Ƣ与否,Sun和Microsoftd下的市场在未来一D|间内肯定q是开发环境的胜者?/p>

  那么Qؓ什么还要探讨Ruby呢?作ؓ一UPerl或Python脚本语言的代替(q正是它的最初目的)或快速原型开发工PRuby可能特别有用。一些h也已l看CRuby的威力,q且开始把Ruby作ؓ一U伟大的Ҏq行~程教学。根据我的本地Ruby用户l的成员提供的信息,有一些h正在把它应用于测试生产系l。不仅如此,我将邀请你Q就象Bruce Tate和Dave Thomas邀h一h探讨一下这U语a的力量和丽之处。即使Ruby不会得到q泛使用Q但是随着Z对它的逐渐认识和试用,它一定会扑ֈ适应自己的编E环境?



nbt 2006-06-19 12:04 发表评论
]]>
RubyE序设计语言快速入??-----之方法存取控?/title><link>http://www.aygfsteel.com/nbtymm/archive/2006/06/19/53737.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Mon, 19 Jun 2006 04:01:00 GMT</pubDate><guid>http://www.aygfsteel.com/nbtymm/archive/2006/06/19/53737.html</guid><wfw:comment>http://www.aygfsteel.com/nbtymm/comments/53737.html</wfw:comment><comments>http://www.aygfsteel.com/nbtymm/archive/2006/06/19/53737.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/nbtymm/comments/commentRss/53737.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/nbtymm/services/trackbacks/53737.html</trackback:ping><description><![CDATA[ <div id="wmqeeuq" class="wzcontent"> </div> <div id="wmqeeuq" class="clear2"> </div> <div id="wmqeeuq" class="fcontent"> <div id="wmqeeuq" class="wzbutton"> <span id="techtarget_ad_content_02"> <div class="wmqeeuq" id="leftup20060516102956" style="Z-INDEX: 1; POSITION: relative"> <div style="Z-INDEX: 3; POSITION: absolute"> <object id="button980" codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0" height="300" width="360" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"> <param name="_cx" value="9525" /> <param name="_cy" value="7938" /> <param name="FlashVars" value="" /> <param name="Movie" value="http://universalmccannafa.allyes.com/main/adfshow?local=blank.swf" /> <param name="Src" value="http://universalmccannafa.allyes.com/main/adfshow?local=blank.swf" /> <param name="WMode" value="Transparent" /> <param name="Play" value="0" /> <param name="Loop" value="-1" /> <param name="Quality" value="High" /> <param name="SAlign" value="" /> <param name="Menu" value="-1" /> <param name="Base" value="" /> <param name="AllowScriptAccess" value="" /> <param name="Scale" value="ShowAll" /> <param name="DeviceFont" value="0" /> <param name="EmbedMovie" value="0" /> <param name="BGColor" value="FFFFFF" /> <param name="SWRemote" value="" /> <param name="MovieData" value="" /> <param name="SeamlessTabbing" value="1" /> <param name="Profile" value="0" /> <param name="ProfileAddress" value="" /> <param name="ProfilePort" value="0" /> <embed src="http://universalmccannafa.allyes.com/main/adfshow?local=blank.swf" quality="high" bgcolor="#FFFFFF" width="360" height="300" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwavFlash"> </embed> </object> </div> <div style="Z-INDEX: 2">   </div> </div> </span> <a class="f1"> <font face="Verdana" color="#000000">在许多情况中Q当你设计你的应用程序时Q你可能惛_C个方法仅Z个对象内部用而不能ؓ另外一些对象用。Ruby提供了三个关键字来限制对Ҏ的存取?/font> </a> </div> </div> <ul> <li> <font face="Verdana" color="#000000">  · PrivateQ只能ؓ该对象所存取的方法?/font> </li> <li> <font face="Verdana" color="#000000">  · ProtectedQ可以ؓ该对象和cd例和直接l承的子cL存取的方法?/font> </li> <li> <font face="Verdana" color="#000000">  · PublicQ可以ؓM对象所存取的方法(Public是所有方法的默认讄Q?/font> </li> </ul> <p> <font face="Verdana" color="#000000">  q些关键字被插入在两个方法之间的代码中。所有从private关键字开始定义的Ҏ都是U有的,直到代码中出现另一个存取控制关键字为止。例如,在下面的代码中,accessor和areaҎ默认情况下都是公qQ而growҎ是私有的。注意,在此doubleSizeҎ被显式指定ؓ公共的。一个类的initializeҎ自动为私有的?/font> </p> <p> <font face="Verdana" color="#000000"> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td style="WORD-WRAP: break-word" bgcolor="#f3f3f3">class Rectangle <br />attr_accessor :heightQ?width <br />def initialize (hgtQ wdth) <br />@height = hgt <br />@width = wdth <br />end <br />def area () <br />@height*@width <br />end <br />private #开始定义私有方?<br />def grow (heightMultipleQ widthMultiple) <br />@height = @height * heightMultiple <br />@width = @width * widthMultiple <br />return "New area:" + area().to_s <br />end <br />public #再次定义公共Ҏ <br />def doubleSize () <br />grow(2Q?) <br />end <br />end</td> </tr> </tbody> </table> </font> </p> <p> <font face="Verdana" color="#000000">  如下所C,doubleSize可以在对象上执行Q但是Q何对grow的直接调用都被拒lƈ且返回一个错误?/font> </p> <p> <font face="Verdana" color="#000000"> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td style="WORD-WRAP: break-word" bgcolor="#f3f3f3">irb(main):075:0> rect2=Rectangle.new(3Q?) <br />=> #<Rectangle:0x59a3088 @width=4Q @height=3> <br />irb(main):076:0> rect2.doubleSize() <br />=> "New area: 48" <br />irb(main):077:0> rect2.grow() <br />NoMethodError: private method 'grow' called for #<Rectangle:0x59a3088 @width=8Q @height=6> <br />from (irb):77 <br />from :0 </td> </tr> </tbody> </table> </font> </p> <p> <font face="Verdana" color="#000000">  默认情况下,在Ruby中,实例和类变量都是U有的,除非提供了属性accessor和mutator?</font> </p> <img src ="http://www.aygfsteel.com/nbtymm/aggbug/53737.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/nbtymm/" target="_blank">nbt</a> 2006-06-19 12:01 <a href="http://www.aygfsteel.com/nbtymm/archive/2006/06/19/53737.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RubyE序设计语言快速入??----之类变量和类Ҏhttp://www.aygfsteel.com/nbtymm/archive/2006/06/19/53735.htmlnbtnbtMon, 19 Jun 2006 03:59:00 GMThttp://www.aygfsteel.com/nbtymm/archive/2006/06/19/53735.htmlhttp://www.aygfsteel.com/nbtymm/comments/53735.htmlhttp://www.aygfsteel.com/nbtymm/archive/2006/06/19/53735.html#Feedback0http://www.aygfsteel.com/nbtymm/comments/commentRss/53735.htmlhttp://www.aygfsteel.com/nbtymm/services/trackbacks/53735.html

class BankAccount
@@interestRate = 6.5
def BankAccount.getInterestRate()
@@interestRate
end
attr_accessor :balance
def initialize (bal)
@balance = bal
end
end

  如你所见,cd量必d使用前初始化Qƈ且就象实例变量一P如果你想存取cd量的话,你需要编写存取器Ҏ。在此,我定义了一个类Ҏ来返回利息率。注意,cd和在getInterestRate前面的句可CZ个类Ҏ。一个类ҎQ不对于Q何实例,其工作方式都是相同的-在此Q是把相同的利息率返回到所有的BankAccount实例。ؓ了调用类ҎQ你需要用类名,p它用于cL法定义中一?

irb(main):045:0> BankAccount.getInterestRate
=> 6.5

  事实上,用于创徏cd例的"new"Ҏ是一个类Ҏ。因此,当你在程序中输入"Rectangle.new"Ӟ你实际在调用newcL?q是Ruby默认情况下所提供的?/p>

  l承

  面向对象~程的原则之一是支持类层次l构。就象自然界中的事物分类一Pcd总更ؓ通用的类q行l承。面向对象编E的特征主要体现在方法和变量的用上。例如,一个Squarecȝ承Rectanglecȝ一些特征,如方法和变量。一个Square是一U更具体cd的Rectangle(高度和宽度相{的Rectangle实例)Q但是它仍然有一个高度和宽度Q也有一个面U?而且与矩形的计算Ҏ相同)。在Ruby中,Squarecd以用下列定义创?

class Square < Rectangle
end 

  "<Rectangle"意味着QSquare是Rectangle的一个子c,或反q来_Rectangle是Square的一个超cR默认情况下Q一个Square实例自动地拥有所有一个Rectangle所拥有的相同的属性和ҎQ包括heightQwidth和areaҎ。ؓ了确保Square实例的边长相{,你可以重载现有的Square的initializeҎQ?/font>

class Square < Rectangle
def initialize (size)
@height = size
@width = size
end
end 

  因ؓ在Ruby中一切都是对象,所以Ruby中的一切几乎都z自ObjectcR尽这在所有类定义中都不是昑ּ的(你不会看?lt;Object出现在定义中Q,但是的确所有的c都z自Ruby的基cObject。知道这个事实后Q你׃更容易地理解接下来要讨论的内宏V?/font>

  当编写你的应用程序时Q你可以在一个类定义外定义方法。在本文开始,你已看到了一个ƈ不是M一个类的一部分的摄氏到华氏转换器方法。作为另外一个示例,下面是一个位于Q何类之外的方法:

def feel?
return "I feel fine."
end 

  Z执行q个ҎQ只要输入该Ҏ名,而不需要类或实例:

irb(main):042:0> feel?
=> "I feel fine." 

  此方法看似另外一U语aQ如CQ中的函数或q程。事实上Q尽这些方法看上去好象不属于Q何类Q但是这些方法却都是你已l添加到ObjectcM的方法,它(因ؓObject是所有类的超c)反过来也把这一ҎdC的承类上。因此,现在你可以在M对象Q如Square和Rectangle的实例)甚至一个类Q如Rectanglec)上调用这个方法?/font>

irb(main):043:0> sq1=Square.new(4)
=> #<Square:0x5a18b50 @width=4Q @height=4>
irb(main):044:0> rect1=Rectangle.new(5Q?)
=> #<Rectangle:0x5a139a8 @width=7Q @height=5>
irb(main):045:0> sq1.feel?
=> "I feel fine."
irb(main):046:0> rect1.feel?
=> "I feel fine."
irb(main):047:0> Rectangle.feel?
=> "I feel fine."



nbt 2006-06-19 11:59 发表评论
]]>
RubyE序设计语言快速入??---之变量与赋?/title><link>http://www.aygfsteel.com/nbtymm/archive/2006/06/19/53733.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Mon, 19 Jun 2006 03:58:00 GMT</pubDate><guid>http://www.aygfsteel.com/nbtymm/archive/2006/06/19/53733.html</guid><wfw:comment>http://www.aygfsteel.com/nbtymm/comments/53733.html</wfw:comment><comments>http://www.aygfsteel.com/nbtymm/archive/2006/06/19/53733.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/nbtymm/comments/commentRss/53733.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/nbtymm/services/trackbacks/53733.html</trackback:ping><description><![CDATA[ <strong>变量与赋?/strong> <p>  xQ你是否注意到前面所有的CZ代码中都~少某种东西?N你必输入常敎ͼ实例变量或类变量?l对不是!q正是Ruby的真正面向对象的天性的一部分。ؓ此,首先让我们看一下Ruby中以前的普通变量。至此,你已l创Z很多Rectangle实例Q但是你q没有把它们保留多长旉。比方说Q你惌把一个变量赋值给你创建的一个Rectangle实例:</p> <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td style="WORD-WRAP: break-word" bgcolor="#f3f3f3">  myRectangle = Rectangle.new(4Q?)</td> </tr> </tbody> </table> <p>  在Ruby中这是完全有效的代码Q而且Ҏ不需要另一行代码来把myRectanglecd化或声明为引用Rectangle的某U东ѝ在执行q一行代码以后,变量myRectangle引用一个Rectangle的实?高度和宽度值分别ؓ4Q?)。但是,q仅是一U在M时刻都可以更改的对象引用Q而与对象的类型无?在Ruby中一切都是对?。因此,下面的命令提C符行中Q你可以Ҏ地把myRectangle赋值给一个字W串:</p> <p> <rectangle:0x587c758 @width="5Q? @height="4"> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td style="WORD-WRAP: break-word" bgcolor="#f3f3f3"> <font face="Verdana" color="#000000">irb(main):049:0< myRectangle=Rectangle.new(4Q?)<br />=> #<Rectangle:0x587c758 @width=5Q?@height=4><br />irb(main):050:0< myRectangle="Jim's Rectangle"<br />=> "Jim's Rectangle"</font> </td> </tr> </tbody> </table> </rectangle:0x587c758> </p> <p>  你可以在许多其它E序语言(甚至包括象Javaq样的面向对象的语言)中试验一下,q观察从你的IDE所产生的编译错误?/p> <p>  变量Q实例变量,cd量,甚至q有"帔R"其实都只是对象引用。它们引用对象,但是它们q不是对象本w。因此,它们可以被动态地改变Q甚臛_用另一U不同类型的对象?/p> <p>  因ؓq一灉|性,所以必dRuby中进行一些约定以帮助每个人都知道某个变量正ؓ代码所使用。其实,你已l看C其中之一(@W号Q它意味着q是一个实例变?。其它的变量Q方法和cd名约定列于下?中?/p> <ul> <li>  · 局部变量和Ҏ参数以一个小写字母开头? </li> <li>  · Ҏ名字以一个小写字母开头? </li> <li>  · 全局变量以一?开头? </li> <li>  · 实例变量以一个@开头? </li> <li>  · cd量以两个@开头? </li> <li>  · 常数以一个大写字母开?它们l常被指定全部大?? </li> <li>  · cd模块名以一个大写字母开头?/li> </ul> <p> </p> <table style="WIDTH: 481px; HEIGHT: 17px" bordercolor="#000000" cellspacing="0" cellpadding="0" width="481" bgcolor="#ffffff" border="1" heihgt=""> <tbody> <tr> <td> 局部变?/td> <td> 全局变量</td> <td> 实例变量</td> <td> cd?/td> <td> 常数</td> <td> cd</td> <td> Ҏ?/td> </tr> <tr> <td> aVar</td> <td> $Var</td> <td> @var</td> <td> @@var</td> <td> VAR</td> <td> MyClassmy</td> <td> Method</td> </tr> <tr> <td> name</td> <td> $debug</td> <td> @lastName</td> <td> @@interest</td> <td> PI</td> <td> Rectangle</td> <td> area</td> </tr> </tbody> </table> <p>  ?.q个表包含了在Ruby~码U定下的相关CZ?/p> <p>  <strong>操作W方?/strong></p> <p>  现在Q假定你惛_现合qRectanglecȝ实例或把它们d到另一个Rectangle实例。你当然可以定义另外一个称?add"的方法,q种选择利用了Ruby真正的面向对象的特征之一。然而,你还可以重蝲"+"q算W来适当地把两个Rectangle实例加v来。这?+"Ҏ(?+5)Q对Ruby来说Q只是另外一个方法而已。由于只?另外一个方?Q所以你可以l它增加一些功能来满Rectanglecȝ需要。例如,你还可以定义"+"q算W来实现一个矩形面U加上另一个矩形面U?/p> <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td style="WORD-WRAP: break-word" bgcolor="#f3f3f3"> <font face="Verdana" color="#000000">def + (anotherRectangle)<br />totalArea = area() + anotherRectangle.area()<br />Rectangle.new(@heightQtotalArea/@height)<br />end </font> </td> </tr> </tbody> </table> <p>  在把q个Ҏd到RectanglecM后,你可以?Ҏ调用来把两个Rectangle的实例相?</p> <rectangle:0x58aa688 @width="3Q? @height="2"> <rectangle:0x58a6ef0 @width="4Q? @height="3"> <p> <rectangle:0x58a4a60 @width="9Q? @height="2"> </rectangle:0x58a4a60> </p> <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td style="WORD-WRAP: break-word" bgcolor="#f3f3f3"> <font face="Verdana" color="#000000">irb(main):001:0> rect1=Rectangle.new(2Q?)<br />=> #<Rectangle:0x58aa688 @width=3Q?@height=2><br />irb(main):002:0> rect2=Rectangle.new(3Q?)<br />=> #<Rectangle:0x58a6ef0 @width=4Q?@height=3><br />irb(main):003:0> rect1+rect2<br />=> #<Rectangle:0x58a4a60 @width=9Q?@height=2> </font> </td> </tr> </tbody> </table> <p>  q正是操作符重蝲Q对于那些用过AgolQC++QPython和其它语a的用h_可能已经非常熟悉q个特征?/p> <p>  <strong>Ҏ参数</strong></p> <p>  xQ我们一直假定,传递给一个方法的参数个数是已知的。也许在其它语言中不可思议Q但是Ruby的确允许你传递可变个数的参数q且以单个参数来捕获它们。ؓ了创Z个可变长度的参数Q只需要把一个星?*)攑֜最后一个参数前面即可。这P你就可以在Ruby中编写一个如下的多边形定义?/p> <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td style="WORD-WRAP: break-word" bgcolor="#f3f3f3">class Polygon<br />def initialize (s1Qs2Qs3Q?others)<br />@sideOne = s1<br />@sideTwo = s2<br />@sideThree = s3<br />@otherSides = others<br />end<br />end</td> </tr> </tbody> </table> <p>  如下所C,你可以用这个定义来创徏一个三角Ş或一个六边Ş?/p> <polygon:0x594db10 @othersides="[]Q? @sidethree="5Q? @sidetwo="4Q? @sideone="2"> <p> <polygon:0x5948d58 @othersides="[5Q? @sidethree="4Q? @sidetwo="18Q? @sideone="2" 7Q?"" 9]Q?""> </polygon:0x5948d58> </p> <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td style="WORD-WRAP: break-word" bgcolor="#f3f3f3"> <font face="Verdana" color="#000000">irb(main):009:0> poly1=Polygon.new(2Q?Q?)<br />=> #<Polygon:0x594db10 @otherSides=[]Q?@sideThree=5Q?@sideTwo=4Q?@sideOne=2><br />irb(main):010:0> poly2=Polygon.new(2Q?8Q?Q?Q?Q?)<br />=> #<Polygon:0x5948d58 @otherSides=[5Q?7Q?9]Q?@sideThree=4Q?@sideTwo=18Q?@sideOne=2></font> </td> </tr> </tbody> </table> <p>  在支持可变长度参数的同时QRubyq允许定义一个方法参数的默认?在调用者没有提供的情况下?。例如,下面是Rectanglecȝ一个更好的初始化表达?/p> <p> </p> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td style="WORD-WRAP: break-word" bgcolor="#f3f3f3"> <font face="Verdana" color="#000000">def initialize (hgt = 1Q?wdth = 1)<br />@height = hgt<br />@width = wdth<br />end </font> </td> </tr> </tbody> </table> <p>  现在Q在调用时如果省略了某参敎ͼ那么在定义中参数紧邻的赋D符担当一个缺省的赋值器。现在,当创Z新的矩ŞӞ如果在调用时省略了宽度,那么一个适当的宽度也会被默认地提?</p> <p> <rectangle:0x5873f68 @width="1Q? @height="2"> <table style="BORDER-RIGHT: #cccccc 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: #cccccc 1px dotted; BORDER-LEFT: #cccccc 1px dotted; BORDER-BOTTOM: #cccccc 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td style="WORD-WRAP: break-word" bgcolor="#f3f3f3"> <font face="Verdana" color="#000000">irb(main):090:0> rect=Rectangle.new(2)<br />=> #<Rectangle:0x5873f68 @width=1Q?@height=2></font> </td> </tr> </tbody> </table> </rectangle:0x5873f68> </p> </polygon:0x594db10> </rectangle:0x58a6ef0> </rectangle:0x58aa688> <img src ="http://www.aygfsteel.com/nbtymm/aggbug/53733.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/nbtymm/" target="_blank">nbt</a> 2006-06-19 11:58 <a href="http://www.aygfsteel.com/nbtymm/archive/2006/06/19/53733.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RubyE序设计语言快速入??--之对象,Ҏ和类http://www.aygfsteel.com/nbtymm/archive/2006/06/19/53732.htmlnbtnbtMon, 19 Jun 2006 03:55:00 GMThttp://www.aygfsteel.com/nbtymm/archive/2006/06/19/53732.htmlhttp://www.aygfsteel.com/nbtymm/comments/53732.htmlhttp://www.aygfsteel.com/nbtymm/archive/2006/06/19/53732.html#Feedback0http://www.aygfsteel.com/nbtymm/comments/commentRss/53732.htmlhttp://www.aygfsteel.com/nbtymm/services/trackbacks/53732.html在Ruby中,一切都是对象。对于那些喜Ƣ用高度面向对象的语言Q例如SmalltalkQEiffel或CLOSQ的用户来说Q这是非常受Ƣ迎的。例?Q?Q??0.8{等都是对象Q而不是如Java或C++中的原始cdQ字W串是对象,cdҎ也都是对象。例如,下面都是有效的Ruby代码(在Ruby中,注释行是?#"W号界定?Q?/font>

#对象-34的绝对?
-34.abs
#对一个QҎq行四舍五入处理
10.8.round
#q回一个字W串对象的大写且逆{的副?
"This is Ruby".upcase.reverse
#q回数学sinҎ的参C?
Math.method(:sin).arity
 


?.Ruby是全对象化的Q在Ruby中,整数QQҎQ字W串Q甚至类和方法都是对象。这里的代码展示了针对这些类型对象的Ҏ调用?

  在Ruby中,所有功能都是通过调用对象上的ҎQ或操作Q实现的。事实上QRuby中的Ҏ调用p其它E序语言中的函数或过E调用一栗?/p>

  p在所有面向对象程序语a中一P对象是从cM创徏的。Ruby库中提供了许多预构徏的类。你可以修改q些cL构徏你自qcRRuby中的cL使用"class"关键字定义的。类名开始是一个大写字母。类定义?end"关键字结束。因此,一个Rectanglecȝ定义可能有如下Ş式:

class Rectangle
end 

  Z把方法添加到c,可以使用def关键字。方法的定义也应该以end关键字结束。跟随def关键字和Ҏ名后面就是方法参数。把一个areaҎdC面的Rectanglecȝ代码看上d下所C:

class Rectangle
def area (hgtQwdth)
return hgt*wdth
end
end 

  对于那些熟悉其它E序语言的用P他可能注意到一些差别。Rubyq不使用M花括h限定cLҎQ也不用分h其它字符来表C程序语句行的结束。Ruby的目标,Ҏ它的创徏者说明,是简单、易用ƈ使编码成Z?事"。谁惌住所有的那些分号Q没有意思!在Ruby中,只要你把语句攑֜一行上Q不需要分h其它代码行结束标记。顺便说一下,在areaҎ参数周围的括h不必要的。在默认情况下,Rubyq回一个方法中最后的内容Q因此return关键字也可以省略。因此,你可以徏立如下简单编码的Rectanglec:

class Rectangle
def area hgtQ wdth
hgt*wdth
end
end
 

  管上面代码是有效的Q但是小括号q是被推荐用于Ҏ参数表达的,q主要是Z实现较好的可L?/p>

       实例变量和属?/strong>

  cM可以有实例变量(在一些语a中也UCؓ属性)。例如,由Rectanglecd建的对象应该都有一个高度和宽度。在Ruby中,实例变量不必昑ּ地在cM声明Q只是必d它们的命名中以一个特D字W来标记和用。具体地_所有的实例变量名都?@"开头。ؓ了实现当调用areaҎӞ存储矩Ş实例的高度和宽度Q你仅需把实例变量添加到areaҎ卛_Q?/p>

class Rectangle
def area (hgtQ wdth)
@height=hgt
@width = wdth
@height*@width
end
end
 

  更确切地_当创Z个Rectangle实例Ӟ应该指定高度和宽度,而实例变量在此时才确定。另外,Ruby提供了一U特D的ҎinitializeQ它允许你徏立或准备cȝ新实例:

class Rectangle
def initialize (hgtQ wdth)
@height = hgt
@width = wdth
end
def area ()
@height*@width
end
end
Z创徏一个新的Rectangle对象或实例,你要调用标准的RubycL造器Ҏ"new"Q?

Rectangle.new(4Q?)
 

  或,你可以用没有括L形式Q?/font>

Rectangle.new 4Q?
 

  q个例子创徏了一个新的Rectangle对象q且调用了initializeҎQ其中传入参??。注意,在下面的代码中添加了height和widthҎ以便׃n高度和宽度信息:

class Rectangle
def initialize (hgtQ wdth)
@height = hgt
@width = wdth
end
def height
return @height
end
def width
return @width
end
def area ()
@height*@width
end
end
 

  同样Qؓ了另外某个Ҏ能够更新或设|一个Rectangle对象的高度和宽度Q需要定义其它一些设|方法:

class Rectangle
def initialize (hgtQ wdth)
@height = hgt
@width = wdth
end
def height
return @height
end
def height=(newHgt)
@height=newHgt
end
def width
return @width
end
def width=(newWdth)
@width=newWdth
end
def area ()
@height*@width
end
end
 

  译者注 本文中的mutator和accessor相当于其它语a中的setter和getter?/p>

  上面的mutatorҎQ?height="?width="Q可能看h有点秘Q但是它们确实只是一些方法。不要让命名中的{号蒙骗了你。在Ҏ名最后的额外字符对于Rubyq不意味着什么,但是它提高了代码的可L。请看下列代码:

aRectangle.height=27
 

  在此Q一个Rectangle对象的高度正被赋|改变Q。事实上Q这仅是一个对Rectangle对象?height="Ҏ的调用?/p>

  因ؓ授予C个对象的实例变量的存取权限非常普通,所以Ruby提供了一l关键字来实Cơ性定义实例变量和accessor/mutatorҎQ从而ɘq些实例变量成ؓ"public"属性。这些关键字是attr_readerQattr_accessor。它们有助于极大地简化代码:

class Rectangle
attr_accessor :heightQ?width
def initialize (hgtQ wdth)
@height = hgt
@width = wdth
end
def area ()
@height*@width
end
end
 

  在上面的CZ代码中,attr_accessorl出了Rectangle相应于height和width属性的getter和setter?/p>用交互式Ruby构徏应用E序

  现在Q你已经知道如何构徏一个简单的Ruby应用E序。ؓ了展CRuby解释器的交互性,让我们启动一个交互的Ruby帮助和控制台工具Q用Ruby安装的fxri工具Q,见图6?/p>


?.启动fxriQ从Windows开始菜单中打开交互式Ruby工具fxri?

  在窗口的右下Ҏ一个交互式的Ruby命o提示W(?irb(main):001:0>"Q,它在H口打开时显C出来。你可以q入到irb命o提示W行中ƈ输入"Rectangle.new(6Q?).area()"。之后,你应该看到如下结果:

irb(main):013:0> Rectangle.new(6Q?).area()
=> 30
 

  z有力!

  在Ruby中,cM来不关闭。这意味着Q你L可以在一个现有类上添加或重定义方法。例如,你还可以在你创徏的RectanglecMd一个circumferenceҎ。在命o提示W上Q请逐行输入下列代码Q?/p>

class Rectangle
def circumference ()
@height * 2 + @width * 2
end
end
 


?.输入Rectanglec:把Rectanglecȝ定义输入到fxri交互式Ruby解释器中Q见图中的右下方?

  Rectanglecd被定义了一ơ?不,Ruby解释器知道你正在修改当前的Rectanglec,它把一个新Ҏd到现有RectanglecM。现在,在命令提C符上输入下列一行:"Rectangle.new(2Q?).circumference()"。你应该看到cM如下的结果:

irb(main):014:0> class Rectangle
irb(main):015:1> def circumference()
irb(main):016:2> @height * 2 + @width * 2
irb(main):017:2> end
irb(main):018:1> end
=> nil
irb(main):019:0> Rectangle.new(2Q?).circumference
=> 10
 

  Z重新定义RectanglecM的Q何方法,例如areaҎQ只需单地重新输入h新的areaҎ定义的类定义卛_Q?/p>

irb(main):020:0> class Rectangle
irb(main):021:1> def area()
irb(main):022:2> @height*2
irb(main):023:2> end
irb(main):024:1> end
=> nil
irb(main):025:0> Rectangle.new(6Q?).area
=> 12
 

  在上面的单例子中QareaҎ被重新定义以便Lq回原来高度?倍?/p>

  一个类永远不会被关闭的思想可以应用于你自己定义的类和该语言中的内嵌cM。ؓ了说明问题,让我们把一个areaҎd到StringcR在命o提示W中输入下列代码Q?

class String
def area()
length()
end
end
 

  现在Q你在定义一个字W串?area"Ҏ以返回该字符串的长度。现在,你可以把你的名字作ؓ一个字W串来试用一下这个新ҎQ见下面代码Q?/p>

irb(main):026:0> class String
irb(main):027:1> def area()
irb(main):028:2> length()
irb(main):029:2> end
irb(main):030:1> end
=> nil
irb(main):031:0> "Jim".area
=> 3 

  在本文示例中Q我们用Ruby的交互式Ҏ及其开发环境来试q种语言Q而且我们仅用了较小的代码片断?/p>


nbt 2006-06-19 11:55 发表评论
]]>
RubyE序设计语言快速入?一)--之安装Rubyhttp://www.aygfsteel.com/nbtymm/archive/2006/06/19/53729.htmlnbtnbtMon, 19 Jun 2006 03:23:00 GMThttp://www.aygfsteel.com/nbtymm/archive/2006/06/19/53729.htmlhttp://www.aygfsteel.com/nbtymm/comments/53729.htmlhttp://www.aygfsteel.com/nbtymm/archive/2006/06/19/53729.html#Feedback0http://www.aygfsteel.com/nbtymm/comments/commentRss/53729.htmlhttp://www.aygfsteel.com/nbtymm/services/trackbacks/53729.html  一?引言

  你是否听说过Ruby?如今Q它成了软g开发界的一个流行话题。该语言在去q春天的一ơJava会议上引h的注意,当时象Bruce TateQDave Thomas{著名h物都在谈论Rubyq且告诉在场的观众Ruby值得一看?/p>

  现在Q如果你象我一h在从事Y件开发,那么我们有p:管学习一U新的编E语a可能是一件趣事,但是只有你对它具有深入了解之后,你才有资g一U怀疑眼光来看待另一U编E语a。毕竟,在上世纪八、九十年代的~程语言之争最l得出结?从根本上看存在两大阵?Java世界和微软基?NET支持的开发语a。ƈ不是我不惛_习另一U语aQ其实我只是期望通过选择其它~程语言才能获得一定技术优势的日子早点l束。然而,׃前面几位著名人士的媄响,我决定一试Ruby?/p>

  好,假定"我已l到q山?Q那么本文就是我对Ruby的研I报告?/p>

  二?安装Ruby

  Ruby是一U开源的~程语言Q由日本的Yukihiro Matsumoto在九十年代中期开发。你可以在www.ruby-lang.org站点得到Ruby。这U语a最初被作ؓ一U脚本语a创徏Q可应用于许多^CQ包括Linux、各U类UNIX、MS-DOS、Windows、BeOS、Amiga、Acorn Risc OS和MacOS X。当前Ruby的最新版本是1.8.4。对于用Windowsq_的用P你可以点按这里来得到一?one-click"型Windows安装E序。随同基本的Ruby二进制文件和库文Ӟq一下蝲中还包含一些有用的(q且是免费的)IDE和工P包括帮助文档和示例代码,RubyGems包管理器QFreeRIDE(免费的Ruby IDE)QFox GUI库,fxri(一U搜索引擎和Ruby文档的GUI指南Q还有一个交互式命o行工?和SciTE(Scintilla文本~辑器IDE)。在写本文时QWindows安装E序所提供的Ruby?E_"版本?.8.2Q还有一?.8.4版本的预览版。注意,本文中的CZ代码是用Windows安装E序所提供?.8.2版本~写的?/p>

  使用Windows安装E序安装Ruby是相当直接的事情。你只要下蝲q运行一个简单的可执行安装文?ruby182-15.exe)Q这个程序就会启动一个标准的安装向导。下载文件大U有15MBQ在向导把Ruby安装到Windowsq_上后占大U?0MB的硬盘空间?/p>

  对于那些偏爱自己的编辑器的程序员Q大量的~辑器都提供了对Ruby的支持,包括emacsQvimQJEditQJedQNedit和Textpad。当Ӟq有著名的Ruby Eclipse工程。Ruby开发工?RDT)是一UEclipse插gQ当前仍处于早期开发中Q但是你可以从此处下载试用它。另外,市场上还有一些便宜的Ruby IDEQArachno Ruby是其中之一?/p>

  q行Ruby

  p许多解释性语a一PRuby提供l程序员多种开发代码的Ҏ。你可以使用命o行工具以交互方式q行Ruby或者创Z个RubyE序文gQ然后要求Ruby的解释器执行此程序?/p>

  在Windows中,打开命o行提C符H口Q在提示W上输入"Ruby"q回?注意:你应该能够ɾpȝ沿Ruby的\bin目录扑ֈRuby可执行文?。那么,Ruby׃q行q等候你输入E序。输入下面的E序Q然后按Ctrl+D再按回R键,你就会看到Ruby执行你的E序Q如?所C?/p>

def convertCtoF (celsius)
print(celsius.to_s + " degrees celsius is " +
((celsius * 9)/5 + 32).to_s + " degrees in
fahrenheit\n")
end
convertCtoF(20)

  ?.在Ruby中以交互方式q行摄氏到华氏温度{换计?/p>

  ?中的转换E序也可以用一URuby IDE或简单文本编辑器实现q保存到一个文件中-例如convertCtoF.rb(.rb是RubyE序的常用文件类?。现在,Ruby解释器将执行q个文g中的RubyE序Q见??/p>

  ?.q行convertCtoF.rb

  那些熟悉SmalltalkQCommon Lisp Object System(CLOS)Q或其它解释性编E环境的用户肯定都会熟悉交互的开发环境。交互特点允怽用小块编E代码进行试验。通过使用一个特D的Ruby批处理文件irb.batQ你p够克服Ruby解释器的非交互性特征。图3昄了用irb.bat命o启动的Ruby。现在,代码可以被逐行地输入,解释和测试?/p>

  ?.交互式Ruby

  交互式Ruby特征也被嵌入到若q工具中。例如,Ruby文档的图形接口fxriQ不仅可作ؓ一U语a指南Q而且可以用作一U交互式Ruby解释?见图4)?/p>

  ?.fxri的交互式Ruby能力:在此Qfxri也用来运行和?相同的Ruby命oQ但q是从文档工具内部运行的?/p>

nbt 2006-06-19 11:23 发表评论
]]>
Ruby On Railse的资?/title><link>http://www.aygfsteel.com/nbtymm/archive/2006/05/18/46830.html</link><dc:creator>nbt</dc:creator><author>nbt</author><pubDate>Thu, 18 May 2006 07:46:00 GMT</pubDate><guid>http://www.aygfsteel.com/nbtymm/archive/2006/05/18/46830.html</guid><wfw:comment>http://www.aygfsteel.com/nbtymm/comments/46830.html</wfw:comment><comments>http://www.aygfsteel.com/nbtymm/archive/2006/05/18/46830.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/nbtymm/comments/commentRss/46830.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/nbtymm/services/trackbacks/46830.html</trackback:ping><description><![CDATA[ <span style="COLOR: #000000">  <strong> Ruby On Railse官方|站Q?/strong><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />http://www.rubyonrails.org/<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />可以作ؓ了解q项技术的LQ那里面有一?5分钟搭徏一个blog的视频很值得一?br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" /><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" /><strong>Rolling with Ruby on RailsQ?/strong><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html?page=1<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />Curt Hibbs写的对于ror的学习过E,q没来得及看Q但是实在是太多地方reference?img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/dot.gif" />随大吧<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" /><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" /><strong>Really Getting Started in Rails</strong><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />http://www.slash7.com/articles/2005/01/24/really-getting-started-in-rails<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />另一处比较著名的入门|站<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" /><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" /><strong>Ruby on Rails中文C֌</strong><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />http://www.railscn.com/<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />不知为啥Q教育网上这个网站还要用代理<img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/dot.gif" />而且好像q不能注册?或者是我的代理的问题?<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" /><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" /><strong>Setting up a Rails Development Environment on Windows Using Eclipse</strong><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />http://www.napcs.com/howto/railsonwindows.html<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />q是一个step by step的在windows上利用eclipse搭徏ruby on rails开发^台的指南<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />我自己就是参考的q个东东?br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" /><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" /><strong>Why's(poignant) guide to ruby<br /></strong><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />http://poignantguide.net/ruby/<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />一个很有意思的ruby语言的入门介l,作者还会自q狐狸插图,<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />q在侧边栏里写自q价DQ让我们觉得老外q是蛮可q<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />恩,应该可以用强烈推荐来形容Q寓学于乐?br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" /><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" /><strong>RailsOnWindows:<br /></strong><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />http://wiki.rubyonrails.com/rails/pages/RailsOnWindows<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />教你怎样在windows下利用Railsq行开?其中包括Apache服务器的配置{等<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />服务器的问题可以从这里找到答案?br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" /><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" /><strong>Ajax on Rails<br /></strong><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />http://www.onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax.html<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />Ajax现在l对是热点,当然不可放过<img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/dot.gif" />虽然对Ajaxq仅仅是名词和用户体验上的了?img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/dot.gif" />-___-<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" /><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" /><strong>GemRails</strong>Q?br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />http://wiki.rubyonrails.com/rails/pages/GemRails<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />GemRails是rails的管理器Q相当于linuxpȝ中的包管理器<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会更好%20-%20W一ơ接触ruby(暂时不会出现W二?_files/None.gif" align="top" />可以自动上网安装新的rails包,可以自动解决依赖Q非常方?/span> <img src ="http://www.aygfsteel.com/nbtymm/aggbug/46830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/nbtymm/" target="_blank">nbt</a> 2006-05-18 15:46 <a href="http://www.aygfsteel.com/nbtymm/archive/2006/05/18/46830.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank">Ҧ</a>| <a href="http://" target="_blank">躣</a>| <a href="http://" target="_blank">¤</a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank">ͭϿ</a>| <a href="http://" target="_blank">ͤ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ͭɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ï</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƶ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">²</a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank">߱</a>| <a href="http://" target="_blank">ԭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">߷</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ȩ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ˮ</a>| <a href="http://" target="_blank">ϴ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>