<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="http://0.0.0.0:4000/feed.xml" rel="self" type="application/atom+xml" /><link href="http://0.0.0.0:4000/" rel="alternate" type="text/html" /><updated>2026-07-05T06:35:59+00:00</updated><id>http://0.0.0.0:4000/feed.xml</id><entry><title type="html">Ruby 入门教程：从零开始掌握这门优雅的编程语言</title><link href="http://0.0.0.0:4000/%E7%BC%96%E7%A8%8B/ruby/2026/07/05/ruby.html" rel="alternate" type="text/html" title="Ruby 入门教程：从零开始掌握这门优雅的编程语言" /><published>2026-07-05T00:00:00+00:00</published><updated>2026-07-05T00:00:00+00:00</updated><id>http://0.0.0.0:4000/%E7%BC%96%E7%A8%8B/ruby/2026/07/05/ruby</id><content type="html" xml:base="http://0.0.0.0:4000/%E7%BC%96%E7%A8%8B/ruby/2026/07/05/ruby.html"><![CDATA[<h2 id="为什么是-ruby">为什么是 Ruby？</h2>

<p>Ruby 是由日本程序员松本行弘（Yukihiro “Matz” Matsumoto）设计的一门动态、面向对象的编程语言。它的设计初衷是<strong>让程序员减少编程过程中的挫败感，享受编程的乐趣</strong>。</p>

<p>Ruby 以<strong>简洁、优雅的语法</strong>和<strong>开发者幸福感</strong>而闻名，被广泛用于 Web 开发（尤其是 Ruby on Rails 框架）、脚本编写和自动化任务。GitHub（早期）、Airbnb、Basecamp 等知名应用都是基于 Rails 开发的。</p>

<blockquote>
  <p><strong>一句话总结</strong>：Ruby 是一门让程序员开心的语言。写 Ruby 代码，就像在用英语写句子。</p>
</blockquote>

<hr />

<h2 id="一安装-ruby">一、安装 Ruby</h2>

<h3 id="检查是否已安装">检查是否已安装</h3>

<p>打开终端，输入：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ruby <span class="nt">-v</span>
</code></pre></div></div>

<p>如果显示版本号（如 <code class="language-plaintext highlighter-rouge">ruby 3.x.x</code>），说明已安装。如果没有，请参考下面的安装方法。</p>

<h3 id="各系统安装方式">各系统安装方式</h3>

<ul>
  <li><strong>Linux（Ubuntu/Debian）</strong>：
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>apt-get <span class="nb">install </span>ruby-full
</code></pre></div>    </div>
  </li>
  <li><strong>macOS</strong>：推荐使用 Homebrew
    <div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>brew <span class="nb">install </span>ruby
</code></pre></div>    </div>
  </li>
  <li><strong>Windows</strong>：访问 <a href="https://rubyinstaller.org/downloads">rubyinstaller.org</a> 下载安装包</li>
</ul>

<blockquote>
  <p>💡 <strong>小贴士</strong>：推荐使用版本管理器（如 rbenv 或 RVM），可以在不同 Ruby 版本间自由切换。</p>
</blockquote>

<h3 id="验证安装">验证安装</h3>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ruby <span class="nt">-v</span>
<span class="c"># 输出类似：ruby 3.3.0 (2023-12-25 revision ...)</span>
</code></pre></div></div>

<hr />

<h2 id="二第一个-ruby-程序">二、第一个 Ruby 程序</h2>

<p>创建文件 <code class="language-plaintext highlighter-rouge">hello.rb</code>：</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">puts</span> <span class="s2">"Hello, Ruby!"</span>
</code></pre></div></div>

<p>运行：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ruby hello.rb
<span class="c"># 输出：Hello, Ruby!</span>
</code></pre></div></div>

<h3 id="交互式运行irb">交互式运行（IRB）</h3>

<p>Ruby 自带交互式控制台 <code class="language-plaintext highlighter-rouge">irb</code>，可以逐行执行代码，非常适合初学者实验。</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>irb
</code></pre></div></div>

<p>进入后直接输入 Ruby 代码即可实时看到结果：</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">001</span><span class="p">:</span><span class="mi">0</span><span class="o">&gt;</span> <span class="nb">puts</span> <span class="s2">"Hello from IRB"</span>
<span class="no">Hello</span> <span class="n">from</span> <span class="no">IRB</span>
<span class="o">=&gt;</span> <span class="kp">nil</span>
</code></pre></div></div>

<p>按 <code class="language-plaintext highlighter-rouge">Ctrl+D</code> 或输入 <code class="language-plaintext highlighter-rouge">exit</code> 退出。</p>

<hr />

<h2 id="三ruby-核心特点">三、Ruby 核心特点</h2>

<h3 id="1-一切皆对象">1. 一切皆对象</h3>

<p>在 Ruby 中，<strong>一切皆对象</strong>——数字、字符串、甚至方法和运算符都是对象。这意味着你可以对任何东西调用方法：</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># 数字也是对象，可以直接调用方法</span>
<span class="mi">5</span><span class="p">.</span><span class="nf">times</span> <span class="p">{</span> <span class="nb">puts</span> <span class="s2">"Hello"</span> <span class="p">}</span>   <span class="c1"># 打印 5 次 "Hello"</span>

<span class="c1"># 负数也有方法</span>
<span class="o">-</span><span class="mi">3</span><span class="p">.</span><span class="nf">abs</span>   <span class="c1"># 返回 3</span>

<span class="c1"># 字符串是对象</span>
<span class="s2">"ruby"</span><span class="p">.</span><span class="nf">upcase</span>   <span class="c1"># 返回 "RUBY"</span>
</code></pre></div></div>

<p>这种设计让代码逻辑更统一，避免了“基础类型”和“对象”的割裂。</p>

<h3 id="2-语法简洁优雅">2. 语法简洁优雅</h3>

<p>Ruby 语法接近自然语言，冗余代码很少：</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># 定义方法</span>
<span class="k">def</span> <span class="nf">say_hello</span><span class="p">(</span><span class="nb">name</span><span class="p">)</span>
  <span class="nb">puts</span> <span class="s2">"Hello, </span><span class="si">#{</span><span class="nb">name</span><span class="si">}</span><span class="s2">!"</span>
<span class="k">end</span>

<span class="n">say_hello</span><span class="p">(</span><span class="s2">"Ruby"</span><span class="p">)</span>   <span class="c1"># 输出：Hello, Ruby!</span>
</code></pre></div></div>

<ul>
  <li>不需要分号结尾（可以省略）</li>
  <li>代码块用 <code class="language-plaintext highlighter-rouge">{}</code> 或 <code class="language-plaintext highlighter-rouge">do...end</code> 包裹</li>
  <li>方法返回值默认是最后一行的结果</li>
</ul>

<h3 id="3-动态类型">3. 动态类型</h3>

<p>变量无需声明类型，赋值时自动确定：</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">x</span> <span class="o">=</span> <span class="mi">10</span>        <span class="c1"># x 是整数</span>
<span class="n">x</span> <span class="o">=</span> <span class="s2">"Ruby"</span>    <span class="c1"># x 变为字符串——完全合法！</span>
</code></pre></div></div>

<h3 id="4-丰富的标准库与生态">4. 丰富的标准库与生态</h3>

<p>Ruby 内置强大的标准库，涵盖字符串处理、文件操作、网络通信等场景。通过 <strong>RubyGems</strong>（Ruby 的包管理工具）可以轻松安装第三方库：</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gem <span class="nb">install </span>rails     <span class="c"># 安装 Rails 框架</span>
gem <span class="nb">install </span>nokogiri  <span class="c"># 安装 HTML/XML 解析库</span>
</code></pre></div></div>

<hr />

<h2 id="四基础语法速览">四、基础语法速览</h2>

<h3 id="变量">变量</h3>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">name</span> <span class="o">=</span> <span class="s2">"Ruby"</span>        <span class="c1"># 局部变量</span>
<span class="vi">@name</span> <span class="o">=</span> <span class="s2">"Ruby"</span>       <span class="c1"># 实例变量</span>
<span class="vc">@@count</span> <span class="o">=</span> <span class="mi">0</span>          <span class="c1"># 类变量</span>
<span class="no">NAME</span> <span class="o">=</span> <span class="s2">"Ruby"</span>        <span class="c1"># 常量（大写开头）</span>
</code></pre></div></div>

<h3 id="条件判断">条件判断</h3>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">age</span> <span class="o">=</span> <span class="mi">18</span>

<span class="k">if</span> <span class="n">age</span> <span class="o">&gt;=</span> <span class="mi">18</span>
  <span class="nb">puts</span> <span class="s2">"成年了"</span>
<span class="k">elsif</span> <span class="n">age</span> <span class="o">&gt;=</span> <span class="mi">12</span>
  <span class="nb">puts</span> <span class="s2">"青少年"</span>
<span class="k">else</span>
  <span class="nb">puts</span> <span class="s2">"小朋友"</span>
<span class="k">end</span>
</code></pre></div></div>

<p>Ruby 还支持<strong>单行写法</strong>：</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">puts</span> <span class="s2">"成年了"</span> <span class="k">if</span> <span class="n">age</span> <span class="o">&gt;=</span> <span class="mi">18</span>
</code></pre></div></div>

<h3 id="循环">循环</h3>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># times 循环</span>
<span class="mi">5</span><span class="p">.</span><span class="nf">times</span> <span class="p">{</span> <span class="nb">puts</span> <span class="s2">"Hello"</span> <span class="p">}</span>

<span class="c1"># each 迭代</span>
<span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">].</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">num</span><span class="o">|</span>
  <span class="nb">puts</span> <span class="n">num</span> <span class="o">*</span> <span class="mi">2</span>
<span class="k">end</span>

<span class="c1"># while 循环</span>
<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="mi">5</span>
  <span class="nb">puts</span> <span class="n">i</span>
  <span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">end</span>
</code></pre></div></div>

<h3 id="方法定义">方法定义</h3>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">b</span><span class="p">)</span>
  <span class="n">a</span> <span class="o">+</span> <span class="n">b</span>   <span class="c1"># 最后一行自动成为返回值</span>
<span class="k">end</span>

<span class="nb">puts</span> <span class="n">add</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>   <span class="c1"># 输出 8</span>
</code></pre></div></div>

<p>方法名可以用 <code class="language-plaintext highlighter-rouge">?</code> 和 <code class="language-plaintext highlighter-rouge">!</code> 结尾：</p>

<ul>
  <li><code class="language-plaintext highlighter-rouge">?</code> 结尾表示返回布尔值，如 <code class="language-plaintext highlighter-rouge">empty?</code></li>
  <li><code class="language-plaintext highlighter-rouge">!</code> 结尾表示有“破坏性”操作，如 <code class="language-plaintext highlighter-rouge">upcase!</code> 会直接修改原字符串</li>
</ul>

<hr />

<h2 id="五面向对象编程">五、面向对象编程</h2>

<h3 id="类和对象">类和对象</h3>

<p>类是对象的蓝图，对象是类的实例。</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">Person</span>
  <span class="c1"># 构造函数</span>
  <span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="nb">name</span><span class="p">,</span> <span class="n">age</span><span class="p">)</span>
    <span class="vi">@name</span> <span class="o">=</span> <span class="nb">name</span>   <span class="c1"># 实例变量</span>
    <span class="vi">@age</span> <span class="o">=</span> <span class="n">age</span>
  <span class="k">end</span>

  <span class="c1"># 方法</span>
  <span class="k">def</span> <span class="nf">introduce</span>
    <span class="nb">puts</span> <span class="s2">"我叫 </span><span class="si">#{</span><span class="vi">@name</span><span class="si">}</span><span class="s2">，今年 </span><span class="si">#{</span><span class="vi">@age</span><span class="si">}</span><span class="s2"> 岁"</span>
  <span class="k">end</span>
<span class="k">end</span>

<span class="c1"># 创建对象</span>
<span class="n">person</span> <span class="o">=</span> <span class="no">Person</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="s2">"小明"</span><span class="p">,</span> <span class="mi">18</span><span class="p">)</span>
<span class="n">person</span><span class="p">.</span><span class="nf">introduce</span>   <span class="c1"># 输出：我叫 小明，今年 18 岁</span>
</code></pre></div></div>

<h3 id="继承">继承</h3>

<p>子类可以继承父类的所有方法：</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">class</span> <span class="nc">Student</span> <span class="o">&lt;</span> <span class="no">Person</span>
  <span class="k">def</span> <span class="nf">study</span>
    <span class="nb">puts</span> <span class="s2">"</span><span class="si">#{</span><span class="vi">@name</span><span class="si">}</span><span class="s2"> 正在学习"</span>
  <span class="k">end</span>
<span class="k">end</span>

<span class="n">student</span> <span class="o">=</span> <span class="no">Student</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="s2">"小红"</span><span class="p">,</span> <span class="mi">16</span><span class="p">)</span>
<span class="n">student</span><span class="p">.</span><span class="nf">introduce</span>   <span class="c1"># 继承自 Person</span>
<span class="n">student</span><span class="p">.</span><span class="nf">study</span>       <span class="c1"># 子类特有</span>
</code></pre></div></div>

<h3 id="模块与混入mixin">模块与混入（Mixin）</h3>

<p>Ruby 是<strong>单继承</strong>语言（每个类只能有一个父类），但通过 <strong>模块（Module）</strong> 可以实现多重行为组合。</p>

<p>模块不能被实例化，但可以被类“混入”（include）：</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">module</span> <span class="nn">Swimmable</span>
  <span class="k">def</span> <span class="nf">swim</span>
    <span class="nb">puts</span> <span class="s2">"正在游泳"</span>
  <span class="k">end</span>
<span class="k">end</span>

<span class="k">module</span> <span class="nn">Flyable</span>
  <span class="k">def</span> <span class="nf">fly</span>
    <span class="nb">puts</span> <span class="s2">"正在飞行"</span>
  <span class="k">end</span>
<span class="k">end</span>

<span class="k">class</span> <span class="nc">Duck</span>
  <span class="kp">include</span> <span class="no">Swimmable</span>
  <span class="kp">include</span> <span class="no">Flyable</span>
<span class="k">end</span>

<span class="n">duck</span> <span class="o">=</span> <span class="no">Duck</span><span class="p">.</span><span class="nf">new</span>
<span class="n">duck</span><span class="p">.</span><span class="nf">swim</span>   <span class="c1"># 输出：正在游泳</span>
<span class="n">duck</span><span class="p">.</span><span class="nf">fly</span>    <span class="c1"># 输出：正在飞行</span>
</code></pre></div></div>

<hr />

<h2 id="六块block与迭代器">六、块（Block）与迭代器</h2>

<p><strong>块（Block）</strong> 是 Ruby 最富表现力的特性之一。它是一段可以传递给方法的代码，有两种写法：</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># 花括号写法（单行）</span>
<span class="mi">5</span><span class="p">.</span><span class="nf">times</span> <span class="p">{</span> <span class="o">|</span><span class="n">i</span><span class="o">|</span> <span class="nb">puts</span> <span class="n">i</span> <span class="p">}</span>

<span class="c1"># do...end 写法（多行）</span>
<span class="mi">5</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span> <span class="o">|</span><span class="n">i</span><span class="o">|</span>
  <span class="nb">puts</span> <span class="s2">"第 </span><span class="si">#{</span><span class="n">i</span><span class="si">}</span><span class="s2"> 次"</span>
<span class="k">end</span>
</code></pre></div></div>

<h3 id="常用迭代器">常用迭代器</h3>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1"># each - 遍历集合</span>
<span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">].</span><span class="nf">each</span> <span class="p">{</span> <span class="o">|</span><span class="n">n</span><span class="o">|</span> <span class="nb">puts</span> <span class="n">n</span> <span class="o">*</span> <span class="mi">2</span> <span class="p">}</span>   <span class="c1"># 输出 2, 4, 6</span>

<span class="c1"># map / collect - 转换集合并返回新数组</span>
<span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">].</span><span class="nf">map</span> <span class="p">{</span> <span class="o">|</span><span class="n">n</span><span class="o">|</span> <span class="n">n</span> <span class="o">*</span> <span class="mi">2</span> <span class="p">}</span>   <span class="c1"># 返回 [2, 4, 6]</span>

<span class="c1"># select - 筛选</span>
<span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="mi">5</span><span class="p">].</span><span class="nf">select</span> <span class="p">{</span> <span class="o">|</span><span class="n">n</span><span class="o">|</span> <span class="n">n</span> <span class="o">&gt;</span> <span class="mi">3</span> <span class="p">}</span>   <span class="c1"># 返回 [4, 5]</span>
</code></pre></div></div>

<h3 id="yield-关键字">yield 关键字</h3>

<p>在方法内部可以用 <code class="language-plaintext highlighter-rouge">yield</code> 调用传入的块：</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">def</span> <span class="nf">greet</span>
  <span class="nb">puts</span> <span class="s2">"开始"</span>
  <span class="k">yield</span> <span class="k">if</span> <span class="nb">block_given?</span>
  <span class="nb">puts</span> <span class="s2">"结束"</span>
<span class="k">end</span>

<span class="n">greet</span> <span class="p">{</span> <span class="nb">puts</span> <span class="s2">"Hello!"</span> <span class="p">}</span>
<span class="c1"># 输出：</span>
<span class="c1"># 开始</span>
<span class="c1"># Hello!</span>
<span class="c1"># 结束</span>
</code></pre></div></div>

<hr />

<h2 id="七推荐学习资源">七、推荐学习资源</h2>

<h3 id="官方资源">官方资源</h3>

<ul>
  <li><strong>Ruby 官方网站</strong>：<a href="https://www.ruby-lang.org/zh_cn/">ruby-lang.org</a> — 下载、文档、入门指南</li>
  <li><strong>官方文档</strong>：<a href="https://doc.ruby-lang.org.cn/">doc.ruby-lang.org.cn</a> — 核心类和模块参考</li>
  <li><strong>20 分钟入门教程</strong>：Ruby 官方的快速入门，适合零基础</li>
</ul>

<h3 id="在线互动学习">在线互动学习</h3>

<ul>
  <li><strong>Try Ruby</strong>：在浏览器中直接体验 Ruby</li>
  <li><strong>Ruby Koans</strong>：通过练习学习 Ruby 语法、结构和文化</li>
  <li><strong>Exercism</strong>：120+ 道 Ruby 练习题，带自动分析</li>
</ul>

<h3 id="书籍推荐">书籍推荐</h3>

<ul>
  <li><strong>《Programming Ruby》</strong>（“镐头书”）— Ruby 经典教材</li>
  <li><strong>《The Well-Grounded Rubyist》</strong> — 从入门到反射、线程等高级主题</li>
  <li><strong>《笨方法学 Ruby》</strong> — 通过大量练习学习 Ruby</li>
</ul>

<h3 id="社区与工具">社区与工具</h3>

<ul>
  <li><strong>RubyGems</strong>：<code class="language-plaintext highlighter-rouge">gem install</code> 安装第三方库</li>
  <li><strong>RuboCop</strong>：Ruby 代码风格检查工具</li>
  <li><strong>VS Code + Ruby 插件</strong> 或 <strong>RubyMine</strong>：推荐的开发环境</li>
</ul>

<hr />

<h2 id="开始你的-ruby-之旅吧">开始你的 Ruby 之旅吧！</h2>

<p>Ruby 是一门<strong>对初学者友好、对专家强大</strong>的语言。无论你是想开发 Web 应用、编写自动化脚本，还是纯粹享受编程的乐趣，Ruby 都会是一个绝佳的选择。</p>

<p>打开终端，输入 <code class="language-plaintext highlighter-rouge">irb</code>，然后敲下你的第一行 Ruby 代码吧！</p>

<div class="language-ruby highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">puts</span> <span class="s2">"Hello, Ruby World!"</span>
</code></pre></div></div>

<p>Happy coding! 🎉</p>]]></content><author><name></name></author><category term="编程" /><category term="Ruby" /><summary type="html"><![CDATA[为什么是 Ruby？]]></summary></entry></feed>