??xml version="1.0" encoding="utf-8" standalone="yes"?>免费成人三级,国产欧美一区二区三区鸳鸯浴,福利在线视频导航http://www.aygfsteel.com/kj110/装、ѝ多?/description>zh-cnThu, 19 Jun 2025 15:18:37 GMTThu, 19 Jun 2025 15:18:37 GMT6037个我爱Ruby的理?/title><link>http://www.aygfsteel.com/kj110/archive/2005/11/22/20977.html</link><dc:creator>My Java Home</dc:creator><author>My Java Home</author><pubDate>Tue, 22 Nov 2005 08:01:00 GMT</pubDate><guid>http://www.aygfsteel.com/kj110/archive/2005/11/22/20977.html</guid><wfw:comment>http://www.aygfsteel.com/kj110/comments/20977.html</wfw:comment><comments>http://www.aygfsteel.com/kj110/archive/2005/11/22/20977.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/kj110/comments/commentRss/20977.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/kj110/services/trackbacks/20977.html</trackback:ping><description><![CDATA[<P><!-- By CooCooWakka 0.0.9rc1--> </P> <div id="wmqeeuq" class=header><!--for google adsense, put your adsense script to actions/googlead.php --><SPAN id=googlead_head style="FLOAT: right"></SPAN><!-- title --><A name=ccwakka_page_top></A> <H2>Ruby-cn Wiki 站点 : <A ><FONT color=#003399>37个我爱Ruby的理?/FONT></A><span id="wmqeeuq" class=origname></SPAN></H2><!-- navigation bar --><A ><FONT color=#003399>首页</FONT></A> </DIV><!-- assistance bar --> <div id="wmqeeuq" class=assist_bar> <div id="wmqeeuq" class=trace_bar><A ><FONT color=#003399></FONT></A> </DIV></DIV> <div id="wmqeeuq" class=page>我不打算费旉来谈论Ruby的历Ԍ如果你没有听说过它,你可以去它的主页看看www.ruby-lang.orgQ或者去它的新闻lcomp.lang.ruby。如果你知道RubyQ我讲q我Z么会喜爱它。(你也可能L的Ruby主页或者个Z늜看) <BR><BR>1. 它是面向对象的?q表CZ么意义呢Q?如果?0个程序员Q你也许会得?2U结果,你有你的看法Q我不会试图L变你的看法。但是有一点,Ruby提供了对数据和方法的装Q允许类的承,对象的多态。不像其它语aQC++,Perl{)QRuby从设计的时候开始就是一U面向对象的语言?BR>2. 它是U面向对象的语言。难道是我多余?不是q样的,之所以这么说Q因为Ruby中一切都是对象,包括原始数据cdQprimitive data typesQ,比如字符Ԍ整型Q都表示的是一个对象,而不需要Java那样提供包装c(wrapper classesQ。另外,甚至是常量,也会被当作对象来处理Q所以一个方法的接收者,可以是一个数字常量?BR>3. 它是动态语a?对于只熟悉像C++QJavaq样静态语a的h来说Q这是一个重大的概念上的差别。动态意味着Ҏ和变量可以在q行时候添加和重定义。它减少了像C语言那样的条件编译(#ifdefQ,而且Ҏ实现反射APIQreflection APIQ。动态性得程序能自我感知Qself-awareQ,比如q行时类型信息,丢qҎQ用来检增加方法的钩子{。在q些斚wRuby和Lisp和Smalltalk都有一些关pR?BR>4. 它是一U解释执行的语言。这是一个负杂的问题Q值得重点解释一下,也许q个特点会因为性能的原因而引起从优点变ؓ~点的争论。对于此Q我有几点见解:1.W一Q快速开发@环是一个巨大的好处Q这要得意于Ruby的解释执行?.多慢才叫慢呢Q在说它慢之前先定一个慢的基准?.也许有h要批评我了,但我q要_处理器每q都在变得原来越快?.如果你真的很在意你的速度Q你可以用C开发一部分你的代码?.最后,从某U意义上_q是一个还在争Z的问题,没有一个语a天生是解释型的Q世界上没有哪个法律q制开发一个Ruby~译器出来?<BR>5. 它理解正则表辑ּ?很多q之前,正则表达式只是用在UNIX的工具如grep或者sed中,或者在vi中进行一些一定的查找Q替换等。Perl的出现解决了q些问题Q而现在,Ruby同样也能做到q些。越来越多得识到了这U字W串和文本处理技术的难以|信的能力,如果你对此表C怀疑,那么请去看一?Jeffrey Friedl的书Mastering Regular ExpressionsQ然后,你就应该不会有什么怀疑了?BR>6. 它是多^台的?Ruby可以q行在LinuxQUNIXQWindowsQ?SPAN class=missingpage>BeOS</SPAN><span id="wmqeeuq" class=missingpage_question><A ><FONT color=#003399>?</FONT></A></SPAN>Q甚至MS-DOS。如果我没记错,甚至q有一个Amiga 版本?BR>7. 它是z来的?q是一件好事情吗?抛去书本上的知识Q它是有用的。牛曾说过“我如果看得比别Q那是因为我站在巨h的肩膀上”。Ruby同样也是站在巨h的肩膀上,它借鉴了Smalltalk, CLU, Lisp, C, C++, Perl, Kornshell{的优点。在我看来它的原则包括:1.不要重复刉轮子?.不要修补没有损坏的东ѝ?.最后一个也是比较特别的Q它能^衡(Leverage Q你已有的知识。你了解UNIX的文件和道Q没关系Q你可以在Ruby中l用Q你用了两年的时间学习了printf 指示W,不必担心QRuby中你也可以用printf。你知道Perl的正则表辑ּ处理Q那么你也就学会了Ruby中的正则表达式?BR>8. 它是创新的?是不是觉得这个和W七条矛盾了Q也许是有一部分矛盾Q每个硬币都有两面。一些Ruby的特炚w是创新的东西Q比如非常有用的Mix-inQ也许这个特点会被后来的语言借鉴。(注:一位读者指出Lisp早在1979q就有mix-in了,q是我的疏忽Q我应该找个更好的例子,q且能确信它。)<BR>9. 它是非常高层ơ的语言。(Very High-Level Language QVHLL) q是一个容易引起争论的话题Q因个术语还没有q泛使用。而且它的意思比起OOP来说q是有讨Z地的。我q么_指的是Ruby能支持复杂的l构和这些结构的负杂的操作,而需要的指o非常,q与最努力原则(Principle of Least EffortQ一致?BR>10. 它有一个灵巧的垃圾攉器?像malloc和free q样的例E已l是昨天的恶梦了Q你不需要什么回收内存的操作Q甚x调用垃圾攉器?<BR>11. 它是脚本语言?不要因ؓ此就认ؓ它不够强大,它不是一个玩兗它是完全成熟的语言Q用它能L的完成传l的脚本操作Q比如运行外部程序,查系l资源,使用道Q捕莯出等{?BR>12. 它是通用的?Kornshell做的东西它也可以做,C语言做的东西它也可以做的很好。你可以用它写一个只q行一ơ的只有10行的E序Q或者对一些遗留程序进行包装,你想写个web serverQ或者一个CGIQ都可以用Ruby来写?BR>13. 它是多线E的?Y你可以用一些简单的API来写多线E程序,甚至在MS-DOS上都可以?BR>14. 它是open source的?你想看它的源代码吗?可以Q你也可以提交补丁,参加q泛的社区,包括它的创造者?BR>15. 它是D得?Ruby的学习曲U比较低Q而如果你过了一个坎Q你开始“猜”事情是怎么工作的,而且你的猜测很多时候都是正的。Ruby坚持最惊Ӟ Least AstonishmentQ的原则?BR>16. 它有异常机制?像Java?C++一P Ruby 中也有异常机Ӟq意味着你不必因回D将代码弄得凌ؕ不堪Q很的嵌套if语句Q很的意大利面条似的逻辑Q更好的错误处理?BR>17. 它有一个高U的数组c:Array?Ruby中数l都是动态的Q你不必像pascal那样在声明它的大,也不必像CQC++那样为它分配内存。它们是对象Q所以你不必兛_它们的长度,实际上你不能"走到末尾Qwalk off the endQ?。这个类提供了各U方法,使得你能够根据烦引,Ҏ元素来访问数l内容,也可以反向处理数l。你也可以用C作ؓsetQ队列,堆栈{。如果你想用查找表,可以用哈希结构?BR>18. 它是可以扩展的?你可以用C或者Ruby来编写外部库Qexternal librariesQ,同样Q你也可以修改已有的cd对象?BR>19. 鼓励文~程Qliterate programmingQ?你可以在RubyE序中嵌入注释或者文,q些文档可以用Ruby的文档工h取和处理。(真正的文编E者可能认是必ȝ基本东西吧)<BR>20. 创造性的使用标点W号和大写字母?比如一个方法返回一个boolean型(Ruby中ƈ没有q种说法Q,那么一般这个方法最后都以问L,如果一个方法要修改接收者本w,或者具有破坏性,则用一个感叹号l尾Q简单,直觉。所有常量,包括cdQ都以大写字母开_所有对象属性以@W号开头。这有匈牙利命名法的实用性,但是没有视觉上的丑陋性?BR>21. Reserved words aren't.It's perfectly allowable to use an identifier that is a so-called "reserved word" as long as the parser doesn't perceive an amibiguity. This is a breath of fresh air.Q能用保留字作ؓ变量吗?没看太懂。)<BR>22. 支持q代器?q得你可以l一个数l,listQtree{对象传递一个块Q然后对它们的每个元素进行block调用。这个技术值得深入学习?BR>23. 它的安全性?Ruby借鉴了Perl中基?SAFE变量的分层控制机?。这对于CGIE序来说非常有用Q可以防止h们攻击web服务器?BR>24. Ruby中没有指针??Java一P和C++不同QRuby中没有指针的概念Q所以免除了关于指针语法和调试的头疼。当Ӟq也意味着最底层的程序开发将会很困难Q比如访问一个设备的控制状态寄存器Q但是,我们可以用一个C库来调用。(像C语言E序员有时候要使用汇编语言一PRubyE序员有时候也要用C语言来完成一定的dQ?BR>25. 它得h们专注于l节?Ruby中有很多同义词和别名Q你也许不记得字W串或数l的长度是sizeq是lengthQ没关系Q它们Q何一个都可以工作。对于Range来说Q你可以使用begin 和end 或者?first ?lastQ它们也都工作。你x写indicesQ结果写成了indexesQ没关系Q这两个都一栗?BR>26. 非常灉|的语法?Ҏ调用时候括号可以省略,参数之间只需用逗号分割。类似Perl风格的数l定义可以让你不用全部用引号和逗号定义一个字W串的数l。关键字return可以生\?BR>27. 丰富的库函数?Ruby提供了线E,socketQ有限对象持久化QCGIQ服务器端可执行的,数据库等其它库函敎ͼq有对Tk的支持等。还有很多其它的库函数?BR>28. 本n自带调试器(debuggerQ?在完的世界中,我们才不需要调试器Q但是这个世界不是完的?BR>29. 交互式执行?可以用Ruby像Kornshell那样执行?(q可能是本页最具争论的一点,我不得不承认QRuby真的不是一个很好的shell。但我仍然坚持,ZRuby的shell是一个不错的L。) <BR>30. 它是明的?不像Pascal那样要求if后面跟着thenQwhile后面跟着do 。变量不需要声明,它们不需要类型。返回类型不必指定,关键字return 可以省略Q它返回最后一个表辑ּ的倹{另一斚wQ它也不像Perl或者C那样复杂难懂?<BR>31. 它是面向表达式的Qexpression-orientedQ?你可以轻易的使用 x = if a<0 then b else c  q样的表辑ּ?BR>32. 语法砂糖Qsyntax sugarQ?(像Mary Poppins解释Q一法的p能使语义被接受) 。如果你惛_数组xq行q代Q可以用for a in x。你也可以用a+=b代替a=a+bQ这都行。很多操作符其实在Ruby中都是方法,q些Ҏ的名字比较直观,短小Q有着便利的语法?BR>33. 它支持操作符重蝲?如果我没有记错的话,早在很久之前的SNOBOL提供了q个功能Q但是直到C++它才变得行。虽然它可能q而出错,但是q仍是一个非怸错的优点。另外Ruby自动定义操作W的赋值版本,比如Q如果你重定义了+Q那么,你同时得C一?=操作W?BR>34. 支持无限_ֺ的数字?有h会关?short, int, long吗,只需要?Bignump了,你可以轻杄实现365的阶乘?BR>35. 有幂操作W?在很久以前,我们在BASIC和FORTRAN中用它Q然而当我们学习Pascal和C之后Q我们才认识到这个操作符有多差劲。(我们被告知自p它是怎么工作的都不知道-它用了ҎQP代了吗,效率如何Q)Q但是,我们真的关系q些吗?如果是,我们可以重写q个ҎQ否则,Ruby有非常好? *(星号之间无空?操作W可以用?BR>36. 强大的字W串处理?If如果你想查找Q判断,格式化,trimQ定界(delimitQ,interposeQtokenizeQ你可以自己选择随便用哪一个来得到你想要的l果?<BR>37. 规则很少引v异常?Ruby的语法和语义比其它语a有条理,每种语言都有独特的一面,每条规则都会有异常发生,但是Ruby规则引v的异常就的多了?BR><BR><BR>原著Q?<A target=_blank rel=nofollow><IMG title=在新H口中打开 height=11 alt="[External Link]" hspace=4 src="http://wiki.ruby-cn.org//images/www.gif" width=11 border=0></A><A rel=nofollow><FONT color=#003399>http://hypermetrics.com/ruby.html</FONT></A> <BR>译Qliubin <A target=_blank rel=nofollow><IMG title=在新H口中打开 height=11 alt="[External Link]" hspace=4 src="http://wiki.ruby-cn.org//images/www.gif" width=11 border=0></A><A rel=nofollow><FONT color=#003399>http://www.ruby-cn.org/</FONT></A></DIV> <div id="wmqeeuq" class=commentsheader><span id="wmqeeuq" class=commentctl>当前面没有留言.[<A ><FONT color=#003399>昄留言?/FONT></A>]</SPAN> </DIV> <div id="wmqeeuq" class=footer> <FORM action=http://wiki.ruby-cn.org/wakka.php?wakka=TextSearch method=get> </FORM></DIV> <div id="wmqeeuq" class=last_foot></DIV><!-- nothing more should be put here, plz put everything you want to say in <div last_foot>. or user will have difficulties in printing the page --><A ><FONT color=#003399></FONT></A><img src ="http://www.aygfsteel.com/kj110/aggbug/20977.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/kj110/" target="_blank">My Java Home</a> 2005-11-22 16:01 <a href="http://www.aygfsteel.com/kj110/archive/2005/11/22/20977.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>