??xml version="1.0" encoding="utf-8" standalone="yes"?>精品亚洲永久免费精品,亚洲成在人线aⅴ免费毛片,亚洲精品无码永久中文字幕http://www.tkk7.com/nbtymm/archive/2006/06/19/53738.htmlnbtnbtMon, 19 Jun 2006 04:04:00 GMThttp://www.tkk7.com/nbtymm/archive/2006/06/19/53738.htmlhttp://www.tkk7.com/nbtymm/comments/53738.htmlhttp://www.tkk7.com/nbtymm/archive/2006/06/19/53738.html#Feedback0http://www.tkk7.com/nbtymm/comments/commentRss/53738.htmlhttp://www.tkk7.com/nbtymm/services/trackbacks/53738.html (tng)一些程序语aQ如C++和CLOSQ提供了(jin)多重l承机制Q一个类可以l承自多个超cR例如,一个House可能l承自一个Buildingc(q同Office和HospitalcMP(j)和Residencec(q同ApartmentcMP(j)。尽多重承可能成ZU语a强有力的特征Q但是由于它?x)增加该语言的复杂性和歧义Q因此许多面向对象语a都没有加入它?/font>

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

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

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

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

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


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

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

class (tng)Rectangle
include (tng)Formulas
end
 (tng)

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

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

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

  十一?控制?/strong>

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

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


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

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

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

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

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

  一个Ruby程?/strong>

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

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

  ȝ

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

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



nbt 2006-06-19 12:04 发表评论
]]>
RubyE序设计语言快速入??-----之方法存取控?/title><link>http://www.tkk7.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.tkk7.com/nbtymm/archive/2006/06/19/53737.html</guid><wfw:comment>http://www.tkk7.com/nbtymm/comments/53737.html</wfw:comment><comments>http://www.tkk7.com/nbtymm/archive/2006/06/19/53737.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/nbtymm/comments/commentRss/53737.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/nbtymm/services/trackbacks/53737.html</trackback:ping><description><![CDATA[ <div id="fxsvlbu" class="wzcontent"> (tng)</div> <div id="snjadgs" class="clear2"> </div> <div id="ddkbuma" class="fcontent"> <div id="nkkhmbp" class="wzbutton"> <span id="techtarget_ad_content_02"> <div class="ykrbmfr" 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"> (tng) (tng) </div> </div> </span> <a class="f1"> <font face="Verdana" color="#000000">在许多情况中Q当你设计你的应用程序时Q你可能惛_C个方法仅Z个对象内部用而不能ؓ(f)另外一些对象用。Ruby提供?jin)三个关键字来限制对?gu)的存取?/font> </a> </div> </div> <ul> <li> <font face="Verdana" color="#000000">  · PrivateQ只能ؓ(f)该对象所存取的方法?/font> </li> <li> <font face="Verdana" color="#000000">  · ProtectedQ可以ؓ(f)该对象和cd例和直接l承的子cL存取的方法?/font> </li> <li> <font face="Verdana" color="#000000">  · PublicQ可以ؓ(f)M对象所存取的方法(Public是所有方法的默认讄Q?/font> </li> </ul> <p> <font face="Verdana" color="#000000">  q些关键字被插入在两个方法之间的代码中。所有从private关键字开始定义的Ҏ(gu)都是U有的,直到代码中出现另一个存取控制关键字为止。例如,在下面的代码中,accessor和areaҎ(gu)默认情况下都是公qQ而growҎ(gu)是私有的。注意,在此doubleSizeҎ(gu)被显式指定ؓ(f)公共的。一个类的initializeҎ(gu)自动为私有的?/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 (tng)Rectangle <br />attr_accessor (tng):heightQ?width <br />def (tng)initialize (tng)(hgtQ?tng)wdth) <br />@height (tng)= (tng)hgt <br />@width (tng)= (tng)wdth <br />end <br />def (tng)area (tng)() <br />@height*@width <br />end <br />private (tng)#开始定义私有方?<br />def (tng)grow (tng)(heightMultipleQ?tng)widthMultiple) <br />@height (tng)= (tng)@height (tng)* (tng)heightMultiple <br />@width (tng)= (tng)@width (tng)* (tng)widthMultiple <br />return (tng)"New (tng)area:" (tng)+ (tng)area().to_s <br />end <br />public (tng)#再次定义公共Ҏ(gu) <br />def (tng)doubleSize (tng)() <br />grow(2Q?) <br />end <br />end</td> </tr> </tbody> </table> (tng)</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> (tng)rect2=Rectangle.new(3Q?) <br />=> (tng)#<Rectangle:0x59a3088 (tng)@width=4Q?tng)@height=3> <br />irb(main):076:0> (tng)rect2.doubleSize() <br />=> (tng)"New (tng)area: (tng)48" <br />irb(main):077:0> (tng)rect2.grow() <br />NoMethodError: (tng)private (tng)method (tng)'grow' (tng)called (tng)for (tng)#<Rectangle:0x59a3088 (tng)@width=8Q?tng)@height=6> <br />from (tng)(irb):77 <br />from (tng):0 (tng)</td> </tr> </tbody> </table> </font> </p> <p> <font face="Verdana" color="#000000">  默认情况下,在Ruby中,实例和类变量都是U有的,除非提供?jin)属性accessor和mutator?</font> </p> <img src ="http://www.tkk7.com/nbtymm/aggbug/53737.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/nbtymm/" target="_blank">nbt</a> 2006-06-19 12:01 <a href="http://www.tkk7.com/nbtymm/archive/2006/06/19/53737.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RubyE序设计语言快速入??----之类变量和类Ҏ(gu)http://www.tkk7.com/nbtymm/archive/2006/06/19/53735.htmlnbtnbtMon, 19 Jun 2006 03:59:00 GMThttp://www.tkk7.com/nbtymm/archive/2006/06/19/53735.htmlhttp://www.tkk7.com/nbtymm/comments/53735.htmlhttp://www.tkk7.com/nbtymm/archive/2006/06/19/53735.html#Feedback0http://www.tkk7.com/nbtymm/comments/commentRss/53735.htmlhttp://www.tkk7.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量的话,你需要编写存取器Ҏ(gu)。在此,我定义了(jin)一个类Ҏ(gu)来返回利息率。注意,cd和在getInterestRate前面的句可CZ个类Ҏ(gu)。一个类Ҏ(gu)Q不对于Q何实例,其工作方式都是相同的-在此Q是把相同的利息率返回到所有的BankAccount实例。ؓ(f)?jin)调用类?gu)Q你需要用类名,p它用于cL法定义中一?

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

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

  l承

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

class (tng)Square (tng)< (tng)Rectangle
end (tng)

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

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

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

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

def (tng)feel?
return (tng)"I (tng)feel (tng)fine."
end (tng)

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

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

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

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



nbt 2006-06-19 11:59 发表评论
]]>
RubyE序设计语言快速入??---之变量与赋?/title><link>http://www.tkk7.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.tkk7.com/nbtymm/archive/2006/06/19/53733.html</guid><wfw:comment>http://www.tkk7.com/nbtymm/comments/53733.html</wfw:comment><comments>http://www.tkk7.com/nbtymm/archive/2006/06/19/53733.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/nbtymm/comments/commentRss/53733.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/nbtymm/services/trackbacks/53733.html</trackback:ping><description><![CDATA[ <strong>变量与赋?/strong> <p>  xQ你是否注意到前面所有的CZ代码中都~少某种东西?N你必输入常敎ͼ实例变量或类变量?l对不是!q正是Ruby的真正面向对象的天性的一部分。ؓ(f)此,首先让我们看一下Ruby中以前的普通变量。至此,你已l创Z(jin)很多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 (tng)= (tng)Rectangle.new(4Q?)</td> </tr> </tbody> </table> <p>  在Ruby中这是完全有效的代码Q而且Ҏ(gu)不需要另一行代码来把myRectanglecd化或声明为引用Rectangle的某U东ѝ在执行q一行代码以后,变量myRectangle引用一个Rectangle的实?高度和宽度值分别ؓ(f)4Q?)。但是,q仅是一U在M时刻都可以更改的对象引用Q而与对象的类型无?在Ruby中一切都是对?。因此,下面的命令提C符行中Q你可以Ҏ(gu)地把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>  因ؓ(f)q一灉|性,所以必dRuby中进行一些约定以帮助每个人都知道某个变量正ؓ(f)代码所使用。其实,你已l看C(jin)其中之一(@W号Q它意味着q是一个实例变?。其它的变量Q方法和cd名约定列于下?中?/p> <ul> <li>  · 局部变量和Ҏ(gu)参数以一个小写字母开头? </li> <li>  · Ҏ(gu)名字以一个小写字母开头? </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> (tng)局部变?/td> <td> (tng)全局变量</td> <td> (tng)实例变量</td> <td> (tng)cd?/td> <td> (tng)常数</td> <td> (tng)cd</td> <td> (tng)Ҏ(gu)?/td> </tr> <tr> <td> (tng)aVar</td> <td> (tng)$Var</td> <td> (tng)@var</td> <td> (tng)@@var</td> <td> (tng)VAR</td> <td> (tng)MyClassmy</td> <td> (tng)Method</td> </tr> <tr> <td> (tng)name</td> <td> (tng)$debug</td> <td> (tng)@lastName</td> <td> (tng)@@interest</td> <td> (tng)PI</td> <td> (tng)Rectangle</td> <td> (tng)area</td> </tr> </tbody> </table> <p>  ?.q个表包含了(jin)在Ruby~码U定下的相关CZ?/p> <p>  <strong>操作W方?/strong></p> <p>  现在Q假定你惛_现合qRectanglecȝ实例或把它们d到另一个Rectangle实例。你当然可以定义另外一个称?add"的方法,q种选择利用?jin)Ruby真正的面向对象的特征之一。然而,你还可以重蝲"+"q算W来适当地把两个Rectangle实例加v来。这?+"Ҏ(gu)(?+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个Ҏ(gu)d到RectanglecM后,你可以?Ҏ(gu)调用来把两个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_(d)可能已经非常熟?zhn)q个特征?/p> <p>  <strong>Ҏ(gu)参数</strong></p> <p>  xQ我们一直假定,传递给一个方法的参数个数是已知的。也许在其它语言中不可思议Q但是Ruby的确允许你传递可变个数的参数q且以单个参数来捕获它们。ؓ(f)?jin)创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在调用时如果省略了(jin)某参敎ͼ那么在定义中参数紧邻的赋D符担当一个缺省的赋值器。现在,当创Z新的矩ŞӞ如果在调用时省略?jin)宽度,那么一个适当的宽度也?x)被默认地提?</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.tkk7.com/nbtymm/aggbug/53733.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/nbtymm/" target="_blank">nbt</a> 2006-06-19 11:58 <a href="http://www.tkk7.com/nbtymm/archive/2006/06/19/53733.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RubyE序设计语言快速入??--之对象,Ҏ(gu)和类http://www.tkk7.com/nbtymm/archive/2006/06/19/53732.htmlnbtnbtMon, 19 Jun 2006 03:55:00 GMThttp://www.tkk7.com/nbtymm/archive/2006/06/19/53732.htmlhttp://www.tkk7.com/nbtymm/comments/53732.htmlhttp://www.tkk7.com/nbtymm/archive/2006/06/19/53732.html#Feedback0http://www.tkk7.com/nbtymm/comments/commentRss/53732.htmlhttp://www.tkk7.com/nbtymm/services/trackbacks/53732.html在Ruby中,一切都是对象。对于那些喜Ƣ用高度面向对象的语言Q例如SmalltalkQEiffel或CLOSQ的用户来说Q这是非常受Ƣ迎的。例?Q?Q??0.8{等都是对象Q而不是如Java或C++中的原始cdQ字W串是对象,cdҎ(gu)也都是对象。例如,下面都是有效的Ruby代码(在Ruby中,注释行是?#"W号界定?Q?/font>

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


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

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

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

class (tng)Rectangle
end (tng)

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

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

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

class (tng)Rectangle
def (tng)area (tng)hgtQ?tng)wdth
hgt*wdth
end
end
 (tng)

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

 (tng) (tng) (tng) (tng) (tng) (tng) 实例变量和属?/strong>

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

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

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

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

Rectangle.new(4Q?)
 (tng)

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

Rectangle.new (tng)4Q?
 (tng)

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

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

  同样Qؓ(f)?jin)另外某个?gu)能够更新或设|一个Rectangle对象的高度和宽度Q需要定义其它一些设|方法:(x)

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

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

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

aRectangle.height=27
 (tng)

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

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

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

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

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


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

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

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

  z有力!

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

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


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

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

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

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

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

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

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

class (tng)String
def (tng)area()
length()
end
end
 (tng)

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

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

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


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

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

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

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

  二?安装Ruby

  Ruby是一U开源的~程语言Q由日本的Yukihiro Matsumoto在九(ji)十年代中期开发。你可以在www.ruby-lang.org站点得到Ruby。这U语a最初被作ؓ(f)一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(h)行工?和SciTE(Scintilla文本~辑器IDE)。在写本文时QW(xu)indows安装E序所提供的Ruby?E_"版本?.8.2Q还有一?.8.4版本的预览版。注意,本文中的CZ代码是用Windows安装E序所提供?.8.2版本~写的?/p>

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

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

  q行Ruby

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

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

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

  ?.交互式Ruby

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

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

nbt 2006-06-19 11:23 发表评论
]]>
Ruby On Railse的资?/title><link>http://www.tkk7.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.tkk7.com/nbtymm/archive/2006/05/18/46830.html</guid><wfw:comment>http://www.tkk7.com/nbtymm/comments/46830.html</wfw:comment><comments>http://www.tkk7.com/nbtymm/archive/2006/05/18/46830.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/nbtymm/comments/commentRss/46830.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/nbtymm/services/trackbacks/46830.html</trackback:ping><description><![CDATA[ <span style="COLOR: #000000"> (tng) (tng)<strong> Ruby On Railse官方|站Q?/strong><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" />http://www.rubyonrails.org/<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" />可以作ؓ(f)?jin)解q项技术的L(fng)Q那里面有一?5分钟搭徏一个blog的视频很值得一?br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" /><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" /><strong>Rolling (tng)with (tng)Ruby (tng)on (tng)RailsQ?/strong><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现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-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" />Curt (tng)Hibbs写的对于ror的学?fn)过E,q没来得?qing)看Q但是实在是太多地方reference?img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/dot.gif" />随大吧<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" /><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" /><strong>Really (tng)Getting (tng)Started (tng)in (tng)Rails</strong><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现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-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" />另一处比较著名的入门|站<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" /><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" /><strong>Ruby (tng)on (tng)Rails中文C֌</strong><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" />http://www.railscn.com/<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" />不知为啥Q教育网上这个网站还要用代理<img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/dot.gif" />而且好像q不能注册?或者是我的代理的问题?<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" /><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" /><strong>Setting (tng)up (tng)a (tng)Rails (tng)Development (tng)Environment (tng)on (tng)Windows (tng)Using (tng)Eclipse</strong><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现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-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" />q是一个step (tng)by (tng)step的在windows上利用eclipse搭徏ruby (tng)on (tng)rails开发^台的指南<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" />我自己就是参考的q个东东?br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" /><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" /><strong>Why's(poignant) (tng)guide (tng)to (tng)ruby<br /></strong><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" />http://poignantguide.net/ruby/<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" />一个很有意思的ruby语言的入门介l,作者还?x)自q狐狸插图,<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现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-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" />恩,应该可以用强烈推荐来形容Q寓学于乐?br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" /><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" /><strong>RailsOnWindows:<br /></strong><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现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-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" />教你怎样在windows下利用Railsq行开?其中包括Apache服务器的配置{等<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" />服务器的问题可以从这里找到答案?br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" /><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" /><strong>Ajax (tng)on (tng)Rails<br /></strong><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现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-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" />Ajax现在l对是热点,当然不可放过<img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/dot.gif" />虽然对Ajaxq仅仅是名词和用户体验上的了(jin)?img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/dot.gif" />-___-<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" /><br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" /><strong>GemRails</strong>Q?br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现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-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" />GemRails是rails的管理器Q相当于linuxpȝ中的包管理器<br /><img src="file:///E:/技术资?Ruby/Ruby%20on%20Rails/BlogJava%20-%20蓝色I间%20-------我相信明天会(x)更好%20-%20W一ơ接触ruby(暂时不会(x)出现W二?_files/None.gif" align="top" />可以自动上网安装新的rails包,可以自动解决依赖Q非常方?/span> <img src ="http://www.tkk7.com/nbtymm/aggbug/46830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/nbtymm/" target="_blank">nbt</a> 2006-05-18 15:46 <a href="http://www.tkk7.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"> <p>лǵվܻԴȤ</p> <a href="http://www.tkk7.com/" title="亚洲av成人片在线观看">亚洲av成人片在线观看</a> <div class="friend-links"> </div> </div> </footer> վ֩ģ壺 <a href="http://qimiaodh.com" target="_blank">ѿaƬ߹ۿ</a>| <a href="http://3y0r.com" target="_blank">EEUSSӰԺWWW߹ۿ</a>| <a href="http://ksyanhui.com" target="_blank">ҹƷ</a>| <a href="http://25v8.com" target="_blank">ŮƵһ</a>| <a href="http://oupur.com" target="_blank">ۺϾþ123</a>| <a href="http://a8g8.com" target="_blank">޵ӰĻ</a>| <a href="http://yjjinfeng.com" target="_blank">þ޹ƷAVϼ</a>| <a href="http://606059.com" target="_blank">Aһ</a>| <a href="http://777vip8.com" target="_blank">AV뾫Ʒ</a>| <a href="http://600c20.com" target="_blank">AVһAS </a>| <a href="http://anhuish.com" target="_blank">ƷϵƵ</a>| <a href="http://100357.com" target="_blank">ŮվƵ</a>| <a href="http://6h6y.com" target="_blank">ڵ߿</a>| <a href="http://langse3.com" target="_blank">ձһѸ </a>| <a href="http://343dd.com" target="_blank">þ޹˾Ʒɫ</a>| <a href="http://jimeng-99.com" target="_blank">˳߹ۿ</a>| <a href="http://lkzrgy.com" target="_blank">޾Ʒ456߲</a>| <a href="http://4466n.com" target="_blank">һƵۿ</a>| <a href="http://binz132.com" target="_blank">ɫWWWŮ</a>| <a href="http://yeshenghuowang.com" target="_blank">޹˾þþƷţӰ</a>| <a href="http://kkjk123.com" target="_blank">Ůbbbbxxxx</a>| <a href="http://xzdlgp.com" target="_blank">Ѿþþþþþ</a>| <a href="http://fenxiangceo.com" target="_blank">þþƷվ</a>| <a href="http://902578.com" target="_blank">޾þһ </a>| <a href="http://wua72.com" target="_blank">B18Ƶ</a>| <a href="http://99880524.com" target="_blank">һƵ </a>| <a href="http://bobostrong31.com" target="_blank">av߿վ</a>| <a href="http://aa7852.com" target="_blank">ƬƵ</a>| <a href="http://wwwfac286.com" target="_blank">ѹaƬվ</a>| <a href="http://tskes.com" target="_blank">Ƶ</a>| <a href="http://zgdhuibao.com" target="_blank">޳ߵӰ</a>| <a href="http://xyjxnhcl.com" target="_blank">һ </a>| <a href="http://46339cc.com" target="_blank">Ƶһ</a>| <a href="http://jst-hosp.com" target="_blank">йŮר</a>| <a href="http://bying100.com" target="_blank">Ƭѹۿþ</a>| <a href="http://4228970.com" target="_blank">ƷѴƬ</a>| <a href="http://137499.com" target="_blank">߳aëƬѲ</a>| <a href="http://jastrelax.com" target="_blank">Ƭһһ߹ۿ</a>| <a href="http://beijinzhongliuyiyuan.com" target="_blank">ձԺ޺Ժ</a>| <a href="http://8953y.com" target="_blank">þþƷAV</a>| <a href="http://88ww99.com" 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>