<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
	<id>https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Ruby</id>
	<title>Ruby - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://arolstar52-zhtest.hf.space/index.php?action=history&amp;feed=atom&amp;title=Ruby"/>
	<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Ruby&amp;action=history"/>
	<updated>2026-07-01T10:03:44Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://arolstar52-zhtest.hf.space/index.php?title=Ruby&amp;diff=17896&amp;oldid=prev</id>
		<title>imported&gt;InternetArchiveBot：​Fixing 2 dead IA links per WP:DEADIABOOKLINKS (20260528dark)) #IABot (v2.0.9.5) (GreenC bot</title>
		<link rel="alternate" type="text/html" href="https://arolstar52-zhtest.hf.space/index.php?title=Ruby&amp;diff=17896&amp;oldid=prev"/>
		<updated>2026-05-29T05:56:05Z</updated>

		<summary type="html">&lt;p&gt;Fixing 2 dead IA links per &lt;a href=&quot;/index.php?title=En:WP:DEADIABOOKLINKS&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;En:WP:DEADIABOOKLINKS（页面不存在）&quot;&gt;WP:DEADIABOOKLINKS&lt;/a&gt; (20260528dark)) #IABot (v2.0.9.5) (&lt;a href=&quot;/index.php?title=User:GreenC_bot&amp;amp;action=edit&amp;amp;redlink=1&quot; class=&quot;new&quot; title=&quot;User:GreenC bot（页面不存在）&quot;&gt;GreenC bot&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{noteTA&lt;br /&gt;
|G1 = IT&lt;br /&gt;
|G2 = FL&lt;br /&gt;
|1=zh-cn:访问; zh-tw:訪問&lt;br /&gt;
}}&lt;br /&gt;
{{about|程式語言&amp;#039;&amp;#039;&amp;#039;Ruby&amp;#039;&amp;#039;&amp;#039;|寶石類的&amp;#039;&amp;#039;&amp;#039;Ruby&amp;#039;&amp;#039;&amp;#039;|紅寶石|印刷用語&amp;#039;&amp;#039;&amp;#039;Ruby字元&amp;#039;&amp;#039;&amp;#039;|旁註標記}}&lt;br /&gt;
&lt;br /&gt;
{{Infobox programming language&lt;br /&gt;
|name = Ruby&lt;br /&gt;
|logo = Ruby_logo.png&lt;br /&gt;
|logo size = 105px&lt;br /&gt;
|paradigm = [[面向对象程序设计|面向对象]]、[[指令式编程|指令式]]、[[函数编程语言|函数式]]&lt;br /&gt;
|year = 1995年&lt;br /&gt;
|designer = [[松本行弘]]&lt;br /&gt;
|developer = 松本行弘等人&lt;br /&gt;
|latest release version = 3.2.0&lt;br /&gt;
|latest release date = {{Release date and age|2022|12|25}}&lt;br /&gt;
|latest preview version = 3.2.0 RC 1&lt;br /&gt;
|latest preview date = {{Release date and age|2022|12|06}}&lt;br /&gt;
|typing = [[动态类型]]&lt;br /&gt;
|implementations = {{link-en|Ruby MRI|Ruby MRI}}、[[YARV]]、{{link-en|Rubinius|Rubinius}}、{{link-en|MagLev|MagLev (software)}}、[[JRuby]]、&amp;lt;br /&amp;gt;{{link-en|MacRuby|MacRuby}}、{{link-en|RubyMotion|RubyMotion}}、{{link-en|HotRuby|HotRuby}}、[[IronRuby]]、&amp;lt;br /&amp;gt;[https://github.com/mruby/mruby mruby]&lt;br /&gt;
|dialects = &lt;br /&gt;
|influenced_by = [[Ada]]&amp;lt;ref name=&amp;quot;nov2pro&amp;quot;&amp;gt;&lt;br /&gt;
{{cite book&lt;br /&gt;
   | last=Cooper&lt;br /&gt;
   | first=Peter&lt;br /&gt;
   | title=Beginning Ruby: From Novice to Professional&lt;br /&gt;
   | edition=2nd&lt;br /&gt;
   | series=Beginning from Novice to Professional&lt;br /&gt;
   | year=2009&lt;br /&gt;
   | publisher=APress&lt;br /&gt;
   | location=Berkeley&lt;br /&gt;
   | isbn=1-4302-2363-4&lt;br /&gt;
   | page=101&lt;br /&gt;
   | quote=To a lesser extent, Python, LISP, Eiffel, Ada, and C++ have also influenced Ruby.}}&lt;br /&gt;
&amp;lt;/ref&amp;gt;、[[C++]]&amp;lt;ref name=&amp;quot;nov2pro&amp;quot; /&amp;gt;、[[CLU]]&amp;lt;ref name=&amp;quot;bini&amp;quot;&amp;gt;&lt;br /&gt;
{{cite book&lt;br /&gt;
   | last=Bini&lt;br /&gt;
   | first=Ola&lt;br /&gt;
   | title=Practical JRuby on Rails Web 2.0 Projects: Bringing Ruby on Rails to Java&lt;br /&gt;
   | url=https://archive.org/details/practicaljrubyon0000bini&lt;br /&gt;
   | year=2007&lt;br /&gt;
   | publisher=APress&lt;br /&gt;
   | location=Berkeley&lt;br /&gt;
   | isbn=1-59059-881-4&lt;br /&gt;
   | page=[https://archive.org/details/practicaljrubyon0000bini/page/3 3]&lt;br /&gt;
   | quote=It draws primarily on features from Perl, Smalltalk, Python, Lisp, Dylan, and CLU.}}&lt;br /&gt;
&amp;lt;/ref&amp;gt;、[[Dylan (编程语言)|Dylan]]&amp;lt;ref name=&amp;quot;bini&amp;quot; /&amp;gt;、[[Eiffel]]&amp;lt;ref name=&amp;quot;nov2pro&amp;quot; /&amp;gt;、&amp;lt;br /&amp;gt;[[Lisp]]&amp;lt;ref name=&amp;quot;bini&amp;quot; /&amp;gt;、[[Perl]]&amp;lt;ref name=&amp;quot;bini&amp;quot; /&amp;gt;、[[Python]]&amp;lt;ref name=&amp;quot;bini&amp;quot; /&amp;gt;、[[Smalltalk]]&amp;lt;ref name=&amp;quot;bini&amp;quot; /&amp;gt;&lt;br /&gt;
|influenced = [[Clojure]]、[[D语言|D]]&amp;lt;ref&amp;gt;{{Cite web |url=http://www.digitalmars.com/d/1.0/ |title=Intro – D Programming Language 1.0 – Digital Mars |accessdate=2013-10-30 |archive-date=2018-12-25 |archive-url=https://web.archive.org/web/20181225131635/https://digitalmars.com/d/1.0/%0a%20 |dead-url=no }}&amp;lt;/ref&amp;gt;、[[Elixir]]、[[Falcon编程语言|Falcon]]、{{link-en|Fancy|Fancy (programming language)}}&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
   | url=http://rubini.us/2011/02/23/introduction-to-fancy/&lt;br /&gt;
   | title=Introduction to Fancy&lt;br /&gt;
   | last=Bertels&lt;br /&gt;
   | first=Christopher&lt;br /&gt;
   | date=23 February 2011&lt;br /&gt;
   | work=Rubinius blog&lt;br /&gt;
   | publisher=Engine Yard&lt;br /&gt;
   | accessdate=2011-07-21&lt;br /&gt;
   | archive-date=2018-12-25&lt;br /&gt;
   | archive-url=https://web.archive.org/web/20181225131621/https://rubinius.com/2011/02/23/introduction-to-fancy/%0A%20&lt;br /&gt;
   | dead-url=no&lt;br /&gt;
   }}&amp;lt;/ref&amp;gt;、[[Groovy]]&amp;lt;br /&amp;gt;、{{link-en|Ioke|Ioke (programming language)}}&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
 |url         = http://ioke.org/&lt;br /&gt;
 |title       = Ioke&lt;br /&gt;
 |last        = Bini&lt;br /&gt;
 |first       = Ola&lt;br /&gt;
 |work        = Ioke.org&lt;br /&gt;
 |accessdate  = 2011-07-21&lt;br /&gt;
 |quote       = inspired by Io, Smalltalk, Lisp and Ruby&lt;br /&gt;
 |deadurl     = yes&lt;br /&gt;
 |archiveurl  = https://web.archive.org/web/20110721091046/http://www.ioke.org/&lt;br /&gt;
 |archivedate = 2011-07-21&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;、{{link-en|Mirah|Mirah (programming language)}}、[[Nu]]&amp;lt;ref&amp;gt;{{cite web&lt;br /&gt;
   | url=http://programming.nu/about&lt;br /&gt;
   | title=About Nu™&lt;br /&gt;
   | last=Burks&lt;br /&gt;
   | first=Tim&lt;br /&gt;
   | work=Programming Nu™&lt;br /&gt;
   | publisher=Neon Design Technology, Inc.&lt;br /&gt;
   | accessdate=2011-07-21&lt;br /&gt;
   | archive-url=https://web.archive.org/web/20110724191313/http://programming.nu/about&lt;br /&gt;
   | archive-date=2011-07-24&lt;br /&gt;
   | dead-url=yes&lt;br /&gt;
   }}&amp;lt;/ref&amp;gt;、{{link-en|Reia|Reia (programming language)}}、{{link-en|Potion|Potion (programming language)}}&lt;br /&gt;
|operating_system = [[跨平台]]&lt;br /&gt;
|license = [[Ruby许可证]]&amp;lt;ref&amp;gt;{{Cite web |url=http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/COPYING?view=markup |title=COPYING in Ruby official source repository |accessdate=2013-10-30 |archive-date=2017-03-20 |archive-url=https://web.archive.org/web/20170320052254/https://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/COPYING?view=markup |dead-url=no }}&amp;lt;/ref&amp;gt; / [[BSD许可证]]&amp;lt;ref&amp;gt;{{Cite web |url=http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/BSDL?view=markup |title=BSDL in Ruby official source repository |access-date=2013-10-30 |archive-date=2022-03-21 |archive-url=https://web.archive.org/web/20220321143246/https://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/BSDL?view=markup }}&amp;lt;/ref&amp;gt; / [[GNU通用公共许可证]]第二版&amp;lt;ref&amp;gt;{{cite web |url = http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/GPL?view=markup |title = Contents of /trunk/GPL |publisher =  |accessdate = 2 May 2015 |archive-date = 2022-03-21 |archive-url = https://web.archive.org/web/20220321143223/https://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/GPL?view=markup }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
|website = {{official url}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ruby&amp;#039;&amp;#039;&amp;#039; 是一种[[面向对象的程序设计|面向对象]]、[[指令式编程|指令式]]、[[函数编程语言|函数式]]、[[动态语言|动态]]的[[通用编程语言]]。在20世纪90年代中期由[[日本]][[電腦科學家]][[松本行弘]]（Matz）设计并开发。&lt;br /&gt;
&lt;br /&gt;
遵守[[BSD许可证]]和Ruby License&amp;lt;ref&amp;gt;{{Cite web |url=http://www.ruby-lang.org/en/LICENSE.txt |title=Ruby License |accessdate=2004-09-25 |archive-date=2011-08-22 |archive-url=https://www.webcitation.org/617jSCkBK?url=http://www.ruby-lang.org/en/LICENSE.txt |dead-url=no }}&amp;lt;/ref&amp;gt;{{NoteTag|Ruby早期遵守[[GPL]]協議。}}。它的灵感与特性来自于[[Perl]]、[[Smalltalk]]、[[Eiffel]]、[[Ada]]以及[[Lisp]]语言。由Ruby语言本身还发展出了[[JRuby]]（[[Java]]平台）、[[IronRuby]]（[[.NET]]平台）等其他平台的Ruby语言替代品。&lt;br /&gt;
&lt;br /&gt;
== 歷史 ==&lt;br /&gt;
[[File:Yukihiro Matsumoto.JPG|150px|缩略图|Ruby的作者[[松本行弘]]]]&lt;br /&gt;
&lt;br /&gt;
Ruby的作者松本行弘於1993年2月24日開始編寫Ruby，直至1995年12月才正式公開發佈於fj（[[新聞群組]]）。之所以稱為Ruby是取法自[[Perl]]，因為Perl的發音與6月的[[誕生石]]pearl（珍珠）相同，Ruby選擇以7月的[[誕生石]]ruby（紅寶石）命名。Ruby相較之下比其他類似的程式語言（如[[Perl]]或[[Python]]）年輕，又因為Ruby是日本人發明的，所以早期的非[[日文]]資料和程式都比較貧乏，在網上仍然可以找到早期對Ruby的資料太少之類的批評。&lt;br /&gt;
&lt;br /&gt;
約於2000年，Ruby開始進入[[美國]]，英文的資料開始發展。&lt;br /&gt;
2004年，[[Ruby on Rails|Rails]]框架誕生，Ruby更加廣為人知，Ruby並於2006年為[[TIOBE]]獲選為年度程式語言。此時為Ruby的全盛時期。&lt;br /&gt;
這一時期許多 [[GitHub]] 上有創意的專案以 Ruby 撰寫，並且有 GitHub 與 [[Twitter]] 等重要網頁選用 Ruby 編寫。&lt;br /&gt;
&lt;br /&gt;
2010年以後，[[Javascript]] 和 [[Python]] 這兩個和 Ruby 定位類似的語言在 [[Google]] 等公司與一些社群的支持下越來越受到歡迎。&lt;br /&gt;
其中，[[V8_(JavaScript引擎)|V8引擎]]使得 Javascript 在同類型語言中有著突出的效能；&lt;br /&gt;
[[NumPy]] 讓 [[Python]] 可以更加優雅的進行科學運算。&lt;br /&gt;
2009年，以[[V8_(JavaScript引擎)|V8引擎]]製作的伺服端平台 [[Node.js]] 發表。&lt;br /&gt;
2015年 機器學習知名專案 [[TensorFlow]] 發表，並選用 Python 作為官方 API 使用的語言。&lt;br /&gt;
Ruby 在多年被蠶食後走向衰微。&lt;br /&gt;
Ruby 已經遠遠沒有全盛時期受歡迎,現在已经掉出[[TIOBE]]程式語言流行排行前20名。&lt;br /&gt;
&lt;br /&gt;
在 Ruby 逐漸失寵以後，開發團隊開始有意的提升 Ruby 的效能。在 Ruby 2.X 版本後期提出「Ruby 3x3」計畫&amp;lt;ref&amp;gt;{{Cite web|title=Ruby 2.6正式版釋出主打JIT，但卻會造成Rails效能下降|url=https://www.ithome.com.tw/news/127932|access-date=2023-06-13|website=iThome|language=zh-hant|archive-date=2022-05-21|archive-url=https://web.archive.org/web/20220521213534/https://ithome.com.tw/news/127932|dead-url=no}}&amp;lt;/ref&amp;gt;，目標是希望 Ruby 3.0 版本能比 2.0 版本有 3 倍效能提升。&lt;br /&gt;
從 Ruby 3.0 開始，團隊開始嘗試在 Ruby 中加入 [[JIT]] 的功能。在 3.1 版本之後，Ruby 的團隊與 [[Shopify]] 團隊合作，嘗試性地加入新的 JIT 編譯器 —— YJIT。&lt;br /&gt;
並且 YJIT 在 Ruby 3.2 正式被引入&amp;lt;ref&amp;gt;{{Cite web|title=Shopify開發團隊公開以Rust重寫Ruby YJIT的權衡與改進細節|url=https://www.ithome.com.tw/news/155201|access-date=2023-06-13|website=iThome|language=zh-hant|archive-date=2023-01-22|archive-url=https://web.archive.org/web/20230122033316/https://ithome.com.tw/news/155201|dead-url=no}}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
== Ruby的理念 ==&lt;br /&gt;
减少编程时候的不必要的琐碎时间，令编写程序的人高兴，是设计Ruby语言的Matz的一个首要的考虑；其次是良好的界面设计。他强调系统设计必须强调人性化，而不是一味从机器的角度设想&amp;lt;ref&amp;gt;{{Cite web |url=http://www.artima.com/intv/ruby4.html |title=The Philosophy of Ruby, A Conversation with Yukihiro Matsumoto, Part I by Bill Venners on 2003-09-29 (Artima Developer，英文) |access-date=2007-09-17 |archive-date=2019-07-05 |archive-url=https://web.archive.org/web/20190705113402/https://www.artima.com/intv/ruby4.html }}&amp;lt;/ref&amp;gt;。&lt;br /&gt;
{{cquote|人们特别是电脑工程师们，常常从机器着想。他们认为：“这样做，机器就能运行的更快；这样做，机器运行效率更高；这样做，机器就会怎样怎样怎样。”实际上，我们需要从人的角度考虑问题，人们怎样编写程序或者怎样使用机器上应用程序。我们是主人，他们是仆人。}}&lt;br /&gt;
&lt;br /&gt;
遵循着{{le|最小惊讶原则|Principle of least astonishment}}，Ruby语言通常非常直观，按照编程人认为它应该的方式运行。&lt;br /&gt;
&lt;br /&gt;
Ruby的作者認為&amp;#039;&amp;#039;&amp;#039;Ruby &amp;gt; (Smalltalk + Perl) / 2&amp;#039;&amp;#039;&amp;#039;{{Fact|time=2007-09-02T13:00:33Z}}，表示Ruby是一個语法像Smalltalk一样完全[[面向对象]]、脚本執行、又有Perl強大的文字處理功能的程式語言。&lt;br /&gt;
&lt;br /&gt;
== Ruby的版本体系 ==&lt;br /&gt;
Ruby版本号的构成形式是（MAJOR）.（MINOR）.（TEENY），均为只有1位的整数；如“1.8.6”、“1.9.3”。&lt;br /&gt;
&lt;br /&gt;
1.9版系统的TEENY不小于1时为稳定版，TEENY为0的版本是开发版。在1.9之前的版本中偶数MINOR代表稳定版，奇数MINOR代表开发版。&amp;lt;ref&amp;gt;[Ruby语言入门东南大学出版社2010年4月第一版P19]&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ruby的Hello World程序 ==&lt;br /&gt;
下面是一个在标准输出设备上输出[[Hello World程序|Hello World]]的简单程序：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Ruby&amp;quot;&amp;gt;&lt;br /&gt;
#!/usr/bin/env ruby&lt;br /&gt;
puts &amp;quot;Hello, world!&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
或者是在irb互動式命令列的模式下：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Ruby&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;puts &amp;quot;Hello, world!&amp;quot;&lt;br /&gt;
Hello, world!&lt;br /&gt;
=&amp;gt; nil&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ruby的特点 ==&lt;br /&gt;
=== 變數與函數的命名規則 ===&lt;br /&gt;
乍看之下與Perl的命名規則有些類似，不過Perl的命名用來區分純量、陣列與映射；而Ruby的命名規則用來表示變數與類別的關係。Ruby的變數有以下幾種：&lt;br /&gt;
* 一般小寫字母、底線開頭：-{zh-tw:變數;zh:變量;zh-cn:变量}-（Variable）。&lt;br /&gt;
* &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt;開頭：-{zh-tw:全域變數;zh:全局變量;zh-cn:全局变量}-（Global variable）。&lt;br /&gt;
* &amp;lt;code&amp;gt;@&amp;lt;/code&amp;gt;開頭：-{zh-tw:實例變數;zh:實例變量;zh-cn:实例变量}-（Instance variable）。&lt;br /&gt;
* &amp;lt;code&amp;gt;@@&amp;lt;/code&amp;gt;開頭：-{zh-tw:類別變數;zh:類別變量;zh-cn:类变量}-（Class variable）類別变量被共享在整个继承链中&lt;br /&gt;
* 大寫字母開頭：常數（Constant）。&lt;br /&gt;
&lt;br /&gt;
有些函數則會加一個後綴，用來表示函數的用法，跟變數命名規則不同，函數的命名規則只是習慣，不具強制性，即使你不照規則命名也不影響程式運作&lt;br /&gt;
* &amp;lt;code&amp;gt;=&amp;lt;/code&amp;gt;結尾：赋值方法，相當於其他程式語言的&amp;lt;code&amp;gt;set&amp;lt;/code&amp;gt;開頭的方法，算是一種[[語法糖]]。&lt;br /&gt;
* &amp;lt;code&amp;gt;!&amp;lt;/code&amp;gt;結尾：破壞性方法，呼叫這個方法會修改本來的物件，這種方法通常有個非破壞性的版本，呼叫非破壞性的版本會回傳一個物件的副本。&lt;br /&gt;
* &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt;結尾：表示這個函數的回傳值是個布林值。&lt;br /&gt;
&lt;br /&gt;
=== 多種字串表示法 ===&lt;br /&gt;
Ruby提供了多種字串的表示方法，方便撰寫有大量文字資料的程式。除了来自C语言的引号表示法之外，还有来自于Perl的百分号字面量记法，以及方便书写大量内容的Heredoc记法。Ruby可以方便地以&amp;lt;code&amp;gt;#{variable_name}&amp;lt;/code&amp;gt;的方式向字符串中插入变量。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
a = &amp;#039;\n这是一个单引号的字符串，反斜线和变量插值不会被转义&amp;#039;&lt;br /&gt;
&lt;br /&gt;
b = %q{这是一个不可转义的字符串}&lt;br /&gt;
&lt;br /&gt;
c = &amp;quot;\n这是一个双引号的字符串，反斜线和变量插值会被转义\n#{a}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
d = %Q{\n這是一個常量字串，特殊内容同样会被转义\n}&lt;br /&gt;
&lt;br /&gt;
e = &amp;lt;&amp;lt;BLOCK&lt;br /&gt;
这是一个以Heredoc方式书写的常量字符串，可转义，结尾标志不可缩进&lt;br /&gt;
BLOCK&lt;br /&gt;
&lt;br /&gt;
f = &amp;lt;&amp;lt;-BLOCK&lt;br /&gt;
      这是一个可以缩进的Heredoc字符串&lt;br /&gt;
    BLOCK&lt;br /&gt;
&lt;br /&gt;
g = &amp;lt;&amp;lt;~BLOCK&lt;br /&gt;
      这是一个可以缩进的Heredoc字符串&lt;br /&gt;
      缩进会被自动去掉，在2.3版本中引入&lt;br /&gt;
    BLOCK&lt;br /&gt;
&lt;br /&gt;
h = %/\t这是一个可转义的的字符串\n/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 動態修改物件、類別 ===&lt;br /&gt;
Ruby是动态语言，你可以在程序中修改先前定义过的類別。&lt;br /&gt;
也可以在某个类別的实例中定义该实例特有的方法，这叫做原型方法（prototype）。&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Ruby&amp;quot;&amp;gt;&lt;br /&gt;
class MyClass&lt;br /&gt;
  def the_method&lt;br /&gt;
    &amp;quot;general method&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
mc = MyClass.new&lt;br /&gt;
def mc.the_method&lt;br /&gt;
  &amp;quot;special for this instance.&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
mc.the_method&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 強大的反射機制與元編程 ===&lt;br /&gt;
Ruby的反射功能相當驚人，甚至可以自行追蹤程式運作，或是取出private變數、攔截方法的呼叫。&lt;br /&gt;
常常與『可以動態的修改物件』這項特色結合，做為『元編程』的功能：程式在運行時，&lt;br /&gt;
可以由程式設計師提供的資訊，自行生成、修改類別或物件，這項功能大大的提高了撰寫程式碼的效率。&lt;br /&gt;
在[[Ruby on Rails|Rails]]之中，就大量使用了這種特性。&lt;br /&gt;
&lt;br /&gt;
以下為用Rails使用元編程的範例：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;Ruby&amp;quot;&amp;gt;&lt;br /&gt;
class Project &amp;lt; ActiveRecord::Base&lt;br /&gt;
  belongs_to :portfolio&lt;br /&gt;
  has_one    :project_manager&lt;br /&gt;
  has_many   :milestones&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
在這個例子中，&amp;lt;code&amp;gt;Project&amp;lt;/code&amp;gt;類別繼承&amp;lt;code&amp;gt;Base&amp;lt;/code&amp;gt;類別，&amp;lt;code&amp;gt;Base&amp;lt;/code&amp;gt;類別內建的&amp;lt;code&amp;gt;belongs_to&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;has_one&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;has_many&amp;lt;/code&amp;gt;方法，便會根據參數來修改Project類別的內容，並自行建立其他相關的方法。程式設計師可以更專心處理程式的運作，而不必為每個類別重複得撰寫程式碼。&lt;br /&gt;
&lt;br /&gt;
=== 豐富靈活的迴圈表示 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
# 使用 for，在 1 到 3 取出值 1、2、3 到 outer_i 裡操作。&lt;br /&gt;
for outer_i in 1..3 do&lt;br /&gt;
  puts &amp;quot;for: #{outer_i * 100}&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 在 1 到 3 的集合裡針對每個值，放到 i 裡操作。&lt;br /&gt;
(1..3).each do |i|&lt;br /&gt;
  puts &amp;quot;each: #{i * 100}&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 只要符合 outer_i 小於等於 300，則進入迴圈。&lt;br /&gt;
outer_i = 100&lt;br /&gt;
while outer_i &amp;lt;= 300&lt;br /&gt;
  puts &amp;quot;while: #{outer_i}&amp;quot;&lt;br /&gt;
  outer_i += 100&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 直到 outer_i 大於 300 前，都可以進入迴圈。&lt;br /&gt;
outer_i = 100&lt;br /&gt;
until outer_i &amp;gt; 300&lt;br /&gt;
  puts &amp;quot;until: #{outer_i}&amp;quot;&lt;br /&gt;
  outer_i += 100&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 無限迴圈，用 break 來打斷迴圈。&lt;br /&gt;
outer_i = 100&lt;br /&gt;
loop do&lt;br /&gt;
  break if outer_i &amp;gt; 300&lt;br /&gt;
&lt;br /&gt;
  puts &amp;quot;loop: #{outer_i}&amp;quot;&lt;br /&gt;
  outer_i += 100&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 作 3 次迴圈，i 從 0 開始遞增 1。&lt;br /&gt;
3.times do |i|&lt;br /&gt;
  puts &amp;quot;times: #{(i + 1) * 100}&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 從 1 遞增 1 到 3，值傳入 i 來操作。&lt;br /&gt;
1.upto(3) do |i|&lt;br /&gt;
  puts &amp;quot;upto: #{i * 100}&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 從 3 遞減 1 到 1，值傳入 i 來操作。&lt;br /&gt;
3.downto(1) do |i|&lt;br /&gt;
  puts &amp;quot;downto: #{400 - i * 100}&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# 從 100 開始以每步 +100 邁向 300。&lt;br /&gt;
100.step(300, 100) do |i|&lt;br /&gt;
  puts &amp;quot;step: #{i}&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 其他特色 ===&lt;br /&gt;
* 完全物件導向：任何東西都是物件，沒有基礎型別&lt;br /&gt;
* 變數是[[動態类型]]。&lt;br /&gt;
* 任何東西都有值：不管是四則運算、邏輯表達式還是一個語句，都有回傳值。&lt;br /&gt;
* [[运算符重载]]&lt;br /&gt;
* [[垃圾回收 (計算機科學)|垃圾回收]]&lt;br /&gt;
* 强类型&amp;lt;ref&amp;gt;{{Cite web |url=http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-python/ |title=To Ruby From Python |access-date=2010-10-26 |archive-date=2022-02-22 |archive-url=https://web.archive.org/web/20220222052643/http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-python/ }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* -{zh:变量无需声明;zh-tw:不必事先宣告變數;zh-cn:变量无需声明}-&lt;br /&gt;
* 在[[Windows]]上，載入[[动态链接库|DLL]]&lt;br /&gt;
&lt;br /&gt;
== 比較與批評 ==&lt;br /&gt;
=== 讓人意外之處 ===&lt;br /&gt;
* 在Ruby中，只有&amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;和&amp;lt;code&amp;gt;nil&amp;lt;/code&amp;gt;表示false，其它的所有值都表示true（包括&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;0.0&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;&amp;quot;&amp;quot;&amp;lt;/code&amp;gt;、&amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt;）&amp;lt;ref&amp;gt;[http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-python/ To Ruby From Python] {{Wayback|url=http://www.ruby-lang.org/en/documentation/ruby-from-other-languages/to-ruby-from-python/ |date=20220222052643 }}，When tested for truth, only false and nil evaluate to a false value. Everything else is true (including 0, 0.0, &amp;quot;&amp;quot;, and []).&amp;lt;/ref&amp;gt;。這點和C語言的『用&amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;代表&amp;lt;code&amp;gt;false&amp;lt;/code&amp;gt;』不同。&lt;br /&gt;
* Ruby的字串是可改變的，這與Java固定不變的字串不同。在Ruby中，常用&amp;lt;code&amp;gt;Symbol&amp;lt;/code&amp;gt;对象来表示不可变的字符串。Ruby 2.3提供了默认冻结字符串的选项，在源码开头添加魔术注释&amp;lt;code&amp;gt;# frozen_string_literal: true&amp;lt;/code&amp;gt;可以打开这个选项，当用户试图更改&amp;lt;code&amp;gt;String&amp;lt;/code&amp;gt;对象时会抛出运行时异常。同时，松本行弘表示，在Ruby 3中，字符串将是默认不可变的。&amp;lt;ref&amp;gt;{{Cite web |url=https://bugs.ruby-lang.org/issues/11473 |title=Immutable String literal in Ruby 3. |access-date=2017-11-27 |archive-date=2022-04-15 |archive-url=https://web.archive.org/web/20220415151759/https://bugs.ruby-lang.org/issues/11473 }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Ruby的繼承功能相當脆弱，儘管Ruby是一個物件導向語言，Ruby內的許多規則，卻使得子類別有可能不小心就覆寫了父類別的功能，在《The Ruby Programming Language》一書中，建議除非程式設計師對一個類別相當了解，否則盡可能不要使用繼承。&lt;br /&gt;
&lt;br /&gt;
=== 和Perl 6比較 ===&lt;br /&gt;
* [[CPAN]]上排名第一名，同時也是[[Perl 6]]的開發者的[[唐鳳]]（Autrijus / Audrey）說：「Ruby就是『沒有到處打廣告的Perl 6』」。&amp;lt;ref&amp;gt;Perl 6於2019年10月更名為[[Perl 6|Raku]]。&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;{{Cite web |url=http://www.openfoundry.org/index.php?option=com_content&amp;amp;Itemid=1&amp;amp;id=188&amp;amp;task=view |title=存档副本 |access-date=2013-10-22 |archive-url=https://web.archive.org/web/20150924060834/http://www.openfoundry.org/index.php?option=com_content&amp;amp;Itemid=1&amp;amp;id=188&amp;amp;task=view |archive-date=2015-09-24 |dead-url=yes }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* 松本行弘在接受[[歐萊禮]]（O&amp;#039;Reilly）訪問時，提到「Ruby借用了很多Perl的東西……，Python遠比Perl要少……」、「我認為Ruby這個名字作為Perl之後的一門語言的名字真是再恰當不過了。」&amp;lt;ref&amp;gt;{{Cite web |url=http://blog.csdn.net/eiffelqiu/archive/2004/02/04/19869.aspx |title=O&amp;#039;Reilly訪問Matz。 |accessdate=2007-07-20 |archive-date=2009-07-28 |archive-url=https://web.archive.org/web/20090728061954/http://blog.csdn.net/eiffelqiu/archive/2004/02/04/19869.aspx |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Perl之父[[拉里·沃爾]]（Larry Wall）說：「很多方面上我還是很喜歡Ruby的，這是因為那些部分是從Perl借過去的。：-）」、「我還喜歡Ruby的C&amp;lt;*&amp;gt;一元星號操作符，所以我把它加到Perl 6裡面。」&amp;lt;ref&amp;gt;{{Cite web |url=http://www.perlchina.org/archive/archive.php?action=archive&amp;amp;page=39 |title=Larry Wall On Perl, Religion, and…… |accessdate=2007-07-20 |archive-date=2007-07-29 |archive-url=https://web.archive.org/web/20070729075423/http://www.perlchina.org/archive/archive.php?action=archive&amp;amp;page=39 |dead-url=no }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 程式範例 ==&lt;br /&gt;
{{howto}}&lt;br /&gt;
下面的代码可以在Ruby [[shell]]中运行，比如irb互動式命令列，或者保存为文件并运行命令&amp;lt;code&amp;gt;ruby &amp;lt;filename&amp;gt;&amp;lt;/code&amp;gt;。&lt;br /&gt;
&lt;br /&gt;
* 一些基本的Ruby代码：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
# Everything, including a literal, is an object, so this works:&lt;br /&gt;
-199.abs                                                        # 199&lt;br /&gt;
&amp;quot;ruby is cool&amp;quot;.length                                           # 12&lt;br /&gt;
&amp;quot;Rick Astley&amp;quot;.index(&amp;quot;c&amp;quot;)                                        # 2&lt;br /&gt;
&amp;quot;Never gonna let you down&amp;quot;.sub(&amp;#039;let you down&amp;#039;, &amp;#039;give you up&amp;#039;)   # &amp;quot;Never gonna give you up&amp;quot;&lt;br /&gt;
&amp;quot;Nice Day Isn&amp;#039;t It?&amp;quot;.downcase.split(//).sort.uniq.join          # &amp;quot; &amp;#039;?acdeinsty&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 一些转换：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
puts &amp;quot;What&amp;#039;s your favorite number?&amp;quot;&lt;br /&gt;
number = gets.chomp&lt;br /&gt;
outputnumber = number.to_i + 1&lt;br /&gt;
puts outputnumber.to_s + &amp;#039; is a bigger and better favorite number.&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 集合 ===&lt;br /&gt;
* 构造和使用[[数组]]：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
a = [1,&amp;#039;hi&amp;#039;, 3.14, 1, 2, [4, 5]]&lt;br /&gt;
&lt;br /&gt;
p a[2]           # 3.14&lt;br /&gt;
p a.[](2)# 3.14&lt;br /&gt;
p a.reverse      # [[4, 5], 2, 1, 3.14, &amp;#039;hi&amp;#039;, 1]&lt;br /&gt;
p a.flatten.uniq # [1, &amp;#039;hi&amp;#039;, 3.14, 2, 4, 5]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 构造和使用关联数组：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
hash = { :water =&amp;gt; &amp;#039;wet&amp;#039;, :fire =&amp;gt; &amp;#039;hot&amp;#039; }&lt;br /&gt;
puts hash[:fire] # Prints:  hot&lt;br /&gt;
&lt;br /&gt;
hash.each_pair do |key, value| # Or:  hash.each do |key, value|&lt;br /&gt;
puts &amp;quot;#{key} is #{value}&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# Prints:  water is wet&lt;br /&gt;
#          fire is hot&lt;br /&gt;
&lt;br /&gt;
hash.delete :water # Deletes :water =&amp;gt; &amp;#039;wet&amp;#039;&lt;br /&gt;
hash.delete_if {|k,value| value==&amp;#039;hot&amp;#039;} # Deletes :fire =&amp;gt; &amp;#039;hot&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== -{zh-hans:块; zh-hant:區塊}-和迭代器 ===&lt;br /&gt;
* 有两个语法用于创建-{zh-hans:块; zh-hant:區塊}-：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
{ puts &amp;quot;Hello, World!&amp;quot; } # Note the { braces }&lt;br /&gt;
#or&lt;br /&gt;
do puts &amp;quot;Hello, World!&amp;quot; end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 传参数的-{zh-hans:块; zh-hant:區塊}-使用闭包[[闭包 (计算机科学)|Closure]]：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
# In an object instance variable (denoted with &amp;#039;@&amp;#039;), remember a block.&lt;br /&gt;
def remember(&amp;amp;a_block)&lt;br /&gt;
  @block = a_block&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# Invoke the above method, giving it a block which takes a name.&lt;br /&gt;
remember {|name| puts &amp;quot;Hello, #{name}!&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
# When the time is right (for the object) -- call the closure!&lt;br /&gt;
@block.call(&amp;quot;Jon&amp;quot;)&lt;br /&gt;
# =&amp;gt; &amp;quot;Hello, Jon!&amp;quot;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 从方法中返回闭包：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
def create_set_and_get(initial_value=0) # Note the default value of 0&lt;br /&gt;
  closure_value = initial_value&lt;br /&gt;
  return Proc.new {|x| closure_value = x}, Proc.new { puts closure_value }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
setter, getter = create_set_and_get  # ie. returns two values&lt;br /&gt;
setter.call(21)&lt;br /&gt;
getter.call # =&amp;gt; 21&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 迭代调用调用时提供的-{zh-hans:块; zh-hant:區塊}-：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
def use_hello&lt;br /&gt;
  yield &amp;quot;hello&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
# Invoke the above method, passing it a block.&lt;br /&gt;
use_hello {|string| puts string} # =&amp;gt; &amp;#039;hello&amp;#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 使用-{zh-hans:块; zh-hant:區塊}-迭代数组：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
array = [1, &amp;#039;hi&amp;#039;, 3.14]&lt;br /&gt;
array.each { |item| puts item }&lt;br /&gt;
# =&amp;gt; 1&lt;br /&gt;
# =&amp;gt; &amp;#039;hi&amp;#039;&lt;br /&gt;
# =&amp;gt; 3.14&lt;br /&gt;
&lt;br /&gt;
array.each_index { |index| puts &amp;quot;#{index}: #{array[index]}&amp;quot; }&lt;br /&gt;
# =&amp;gt; 0: 1&lt;br /&gt;
# =&amp;gt; 1: &amp;#039;hi&amp;#039;&lt;br /&gt;
# =&amp;gt; 2: 3.14&lt;br /&gt;
&lt;br /&gt;
(3..6).each { |num| puts num }&lt;br /&gt;
# =&amp;gt; 3&lt;br /&gt;
# =&amp;gt; 4&lt;br /&gt;
# =&amp;gt; 5&lt;br /&gt;
# =&amp;gt; 6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
像inject()方法可以接收一个参数和一个-{zh-hans:块; zh-hant:區塊}-。迭代的注入列表的每一个成员，执行函数时保存总和。这同[[函数编程语言]]中的foldl函数相类似，比如：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
[1,3,5].inject(10) {|sum, element| sum + element} # =&amp;gt; 19&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
首先-{zh-hans:块; zh-hant:區塊}-接收到了10（inject的参数）当作变量sum，并且1（数组的第一个元素）当作变量element；这会返回11。11又被当作下一步的sum变量，它加上3得到了14。14又被加上了5，最终返回结果19。&lt;br /&gt;
&lt;br /&gt;
* -{zh-hans:块; zh-hant:區塊}-运行在内置的方法中：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
File.open(&amp;#039;file.txt&amp;#039;, &amp;#039;w&amp;#039;) do |file| # &amp;#039;w&amp;#039; denotes &amp;quot;write mode&amp;quot;.&lt;br /&gt;
  file.puts &amp;#039;Wrote some text.&amp;#039;&lt;br /&gt;
end                                  # File is automatically closed here&lt;br /&gt;
&lt;br /&gt;
File.readlines(&amp;#039;file.txt&amp;#039;).each do |line|&lt;br /&gt;
puts line&lt;br /&gt;
end&lt;br /&gt;
# =&amp;gt; Wrote some text.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 使用枚举器和块求1到10的平方：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
(1..10).collect {|x| x*x} # =&amp;gt; [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== -{zh-hans:类; zh-hant:類別}- ===&lt;br /&gt;
下面的代码定义一个命名为Person的-{zh-hans:类; zh-hant:類別}-。含有一个「initialize」方法，用于构选创建一个新对象，它还有两个方法，一个重载了&amp;lt;=&amp;gt;比较运算符（这样&amp;lt;code&amp;gt;Array#sort&amp;lt;/code&amp;gt;可以使用age排序）另一个重载了&amp;lt;code&amp;gt;to_s&amp;lt;/code&amp;gt;方法（这样&amp;lt;code&amp;gt;Kernel#puts&amp;lt;/code&amp;gt;可以格式化输出），&amp;lt;code&amp;gt;attr_reader&amp;lt;/code&amp;gt;是Ruby中元数据编程的例子：&amp;lt;code&amp;gt;attr_accessor&amp;lt;/code&amp;gt;为实例变量定义了getter和setter方法，&amp;lt;code&amp;gt;attr_reader&amp;lt;/code&amp;gt;只是一个getter方法。另外，方法中最后的声明是它的返回值，也允许显式的使用「return」语句。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
class Person&lt;br /&gt;
  attr_reader :name, :age&lt;br /&gt;
  def initialize(name, age)&lt;br /&gt;
    @name, @age = name, age&lt;br /&gt;
  end&lt;br /&gt;
  def &amp;lt;=&amp;gt;(person) # Comparison operator for sorting&lt;br /&gt;
    @age &amp;lt;=&amp;gt; person.age&lt;br /&gt;
  end&lt;br /&gt;
  def to_s&lt;br /&gt;
    &amp;quot;#@name (#@age)&amp;quot;&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
group = [&lt;br /&gt;
  Person.new(&amp;quot;Bob&amp;quot;, 33),&lt;br /&gt;
  Person.new(&amp;quot;Chris&amp;quot;, 16),&lt;br /&gt;
  Person.new(&amp;quot;Ash&amp;quot;, 23)&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
puts group.sort.reverse&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* 下面按age倒序输出了三个名字：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
Bob(33)&lt;br /&gt;
Ash(23)&lt;br /&gt;
Chris(16)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 各種版本 ==&lt;br /&gt;
[[Matz&amp;#039;s Ruby interpreter]]，最初也是最常見的Ruby版本，簡稱MRI，用C語言撰寫。&lt;br /&gt;
&lt;br /&gt;
[[JRuby]]，類似[[Python]]的[[Jython]]，一個可於[[Java]]上執行Ruby的語言，支援Java的介面和類別。最新發布版爲9.1.6.0（2016-11-09），與Ruby 2.3兼容。它的官方網站為[https://web.archive.org/web/20110208071026/http://jruby.org/ jruby.org]。&lt;br /&gt;
&lt;br /&gt;
[[mruby]]是一个轻量级的Ruby解释器，可以嵌入到其它应用程序中，或者作为库链接到应用中。&lt;br /&gt;
&lt;br /&gt;
== 參見 ==&lt;br /&gt;
* [[Python]]（經常和Ruby比較&amp;lt;ref&amp;gt;{{Cite web |url=http://www.infoq.com/cn/news/2007/05/guido-python |title=Guido談Python 3000及與Ruby的競爭。 |access-date=2007-07-23 |archive-date=2012-11-20 |archive-url=https://web.archive.org/web/20121120205204/http://www.infoq.com/cn/news/2007/05/guido-python }}&amp;lt;/ref&amp;gt;）&lt;br /&gt;
* [[Perl]]&lt;br /&gt;
** [[Perl 6]]（vs. Ruby）&lt;br /&gt;
* [[QtRuby]]：[[Qt]]的Ruby綁定&lt;br /&gt;
* [[Smalltalk]]&lt;br /&gt;
* [[Ruby on Rails]]：一个MVC的快速網站开发应用框架。&lt;br /&gt;
* [[RGSS]]：使用Ruby為基礎的遊戲腳本系統。&lt;br /&gt;
&lt;br /&gt;
== 注释 ==&lt;br /&gt;
{{NoteFoot}}&lt;br /&gt;
&lt;br /&gt;
== 参考文献 ==&lt;br /&gt;
{{Reflist|30em}}&lt;br /&gt;
&lt;br /&gt;
== 外部連結 ==&lt;br /&gt;
* [http://www.ruby-lang.org/ Ruby的官方网站]{{Wayback|url=http://www.ruby-lang.org/ |date=20200108175215 }}&lt;br /&gt;
* [https://web.archive.org/web/20040926003428/http://www.rubycentral.com/book/ 《Programming Ruby》網路版]&lt;br /&gt;
* [https://web.archive.org/web/20130805082318/http://raa.ruby-lang.org/ Ruby Application Archive]&lt;br /&gt;
* [https://web.archive.org/web/20060812164344/http://rubyforge.org/ RubyForge]提供一個類似[[SourceForge]]和Freshmeat的環境給用Ruby或給Ruby寫的工具，現已停止運營。&lt;br /&gt;
* [https://web.archive.org/web/20171229223014/http://ruby-doc.org/ Ruby Documentation project]&lt;br /&gt;
* [https://archive.today/20070517233550/http://www.meshplex.org/wiki/Ruby/Ruby_on_Rails_programming_tutorials Full Ruby on Rails Tutorial]&lt;br /&gt;
* [http://tryruby.org/ TryRuby]{{Wayback|url=http://tryruby.org/ |date=20110928182220 }}{{en}}&lt;br /&gt;
* [http://ruby.tw/ Ruby Taiwan社群] {{Wayback|url=http://ruby.tw/ |date=20220418032406 }}&lt;br /&gt;
* [http://ruby-china.org/ Ruby中国社区] {{Wayback|url=http://ruby-china.org/ |date=20200818050535 }}目前中国Ruby开发者公认的Ruby中文社区。&lt;br /&gt;
* [https://www.toptal.com/ruby/how-to-set-up-a-microservices-architecture 微服务架构在Ruby中]{{Dead link}}{{en}}&lt;br /&gt;
&lt;br /&gt;
{{-}}&lt;br /&gt;
{{程序设计语言|Ruby}}&lt;br /&gt;
{{網頁技術與標準}}&lt;br /&gt;
{{Authority control}}&lt;br /&gt;
[[Category:Ruby| ]]&lt;br /&gt;
[[Category:程序设计语言]]&lt;br /&gt;
[[Category:腳本語言]]&lt;br /&gt;
[[Category:面向文本编程语言]]&lt;br /&gt;
[[Category:面向对象的编程语言]]&lt;br /&gt;
[[Category:基于类的编程语言]]&lt;br /&gt;
[[Category:ISO标准化编程语言]]&lt;br /&gt;
[[Category:1995年建立的程式語言]]&lt;br /&gt;
[[Category:日本發明]]&lt;br /&gt;
[[Category:自由編譯器與直譯器]]&lt;/div&gt;</summary>
		<author><name>imported&gt;InternetArchiveBot</name></author>
	</entry>
</feed>