<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>ceclinux-github (ceclinux)</title>
    <link>https://ruby-china.org/ceclinux-github</link>
    <description/>
    <language>en-us</language>
    <item>
      <title>是不是我学习的姿势不对？Rails 路由我总是理解不好</title>
      <description>&lt;p&gt;Rails 路由全解&lt;a href="https://ruby-china.github.io/rails-guides/routing.html#prefixing-the-named-route-helpers" rel="nofollow" target="_blank" title=""&gt;是这样写的&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Rails 路由能够识别 URL 地址，并把它们分派给控制器动作或 Rack 应用进行处理。它还能生成路径和 URL 地址，从而避免在视图中硬编码字符串。&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;OK，说实话有点抽象。所以我的理解是，Rails 为了方便程序员，搞了&lt;code&gt;route.rb&lt;/code&gt;是一个 DSL，这个 DSL 能够 1. 方便大量创建路由 2. 降低使用者的抽象成本&lt;/p&gt;

&lt;p&gt;第一点是毫无疑问&lt;code&gt;resources :photos&lt;/code&gt;会在应用中创建 7 个不同的路由，这些路由都会映射到 Photos 控制器上。写一行就干了这么多事，漂亮。&lt;/p&gt;

&lt;p&gt;但是第二点我实在理解不能，请问&lt;code&gt;scope&lt;/code&gt;是啥意思，&lt;code&gt;concern&lt;/code&gt;是啥？&lt;code&gt;collection&lt;/code&gt;和&lt;code&gt;member&lt;/code&gt;呢？还有&lt;code&gt;match&lt;/code&gt;？这些单词在我看来都很“抽象”，不具体。我很难把这些单词和他们所创建的路由联系在一起，总是混淆。求指点。&lt;/p&gt;</description>
      <author>ceclinux-github</author>
      <pubDate>Tue, 06 Mar 2018 22:06:23 +0800</pubDate>
      <link>https://ruby-china.org/topics/35183</link>
      <guid>https://ruby-china.org/topics/35183</guid>
    </item>
    <item>
      <title>JIT for MRI 开始开发了</title>
      <description>&lt;p&gt;来自这个 commit: &lt;a href="https://github.com/ruby/ruby/commit/ed935aa5be0e5e6b8d53c3e7d76a9ce395dfa18b" rel="nofollow" target="_blank"&gt;https://github.com/ruby/ruby/commit/ed935aa5be0e5e6b8d53c3e7d76a9ce395dfa18b&lt;/a&gt;, 已经有人迫不及待的开玩了：
&lt;a href="https://www.johnhawthorn.com/2018/02/playing-with-ruby-jit-mjit/" rel="nofollow" target="_blank"&gt;https://www.johnhawthorn.com/2018/02/playing-with-ruby-jit-mjit/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;感想：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;JIT 开发依然在非常初级的阶段，很容易写出奇怪的代码来跳过（或触发 JIT 优化）&lt;/li&gt;
&lt;li&gt;性能提升巨大，我的机子上跑 2.6.0-dev --jit 比 2.5.0 快了差不多一倍，非常期待后续提升&lt;/li&gt;
&lt;/ol&gt;</description>
      <author>ceclinux-github</author>
      <pubDate>Thu, 08 Feb 2018 18:57:26 +0800</pubDate>
      <link>https://ruby-china.org/topics/35015</link>
      <guid>https://ruby-china.org/topics/35015</guid>
    </item>
    <item>
      <title>如何用 pry 修改运行之前的代码块</title>
      <description>&lt;p&gt;&lt;code&gt;pry&lt;/code&gt;我一直用的很舒服，基本上什么功能我想要的都有，调试 Ruby 代码确实很方便，唯一不方便的&lt;code&gt;pry&lt;/code&gt;的上键令我很疑惑，按一下&lt;code&gt;pry&lt;/code&gt;会显示上一行，而非一个代码块（idle 和 chrome 调试器里都是出现上一个代码块）。比如我输入&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;a&lt;/span&gt;
  &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;回车后再按上键，出来的是&lt;code&gt;end&lt;/code&gt;，而非整个函数定义。我大约看了下&lt;code&gt;pry wiki&lt;/code&gt;，也没有找到特别好的办法在&lt;code&gt;pry&lt;/code&gt;中编辑上一个代码块的。求教，大家在&lt;code&gt;pry&lt;/code&gt;中是怎么修改运行之前的代码块的？&lt;/p&gt;</description>
      <author>ceclinux-github</author>
      <pubDate>Sun, 05 Nov 2017 16:48:08 +0800</pubDate>
      <link>https://ruby-china.org/topics/34514</link>
      <guid>https://ruby-china.org/topics/34514</guid>
    </item>
    <item>
      <title>如何理解 Ripper.sexp 输出信息</title>
      <description>&lt;p&gt;我想要了解下 Ruby parser 相关的内容，发现了 Ripper 这个库，但是它的输出很难看懂，比如说官方的例子&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'ripper'&lt;/span&gt;
&lt;span class="nb"&gt;require&lt;/span&gt; &lt;span class="s1"&gt;'pp'&lt;/span&gt;

&lt;span class="n"&gt;pp&lt;/span&gt; &lt;span class="no"&gt;Ripper&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sexp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'def hello(world) "Hello, #{world}!"; end'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="c1"&gt;#=&amp;gt; [:program,&lt;/span&gt;
       &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="ss"&gt;:def&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
         &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:@ident&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"hello"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt;
         &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:paren&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:params&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="ss"&gt;:@ident&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"world"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;]]],&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt;
         &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:bodystmt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="ss"&gt;:string_literal&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:string_content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
             &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:@tstring_content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"Hello, "&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;]],&lt;/span&gt;
             &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:string_embexpr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[[&lt;/span&gt;&lt;span class="ss"&gt;:var_ref&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:@ident&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"world"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;27&lt;/span&gt;&lt;span class="p"&gt;]]]]],&lt;/span&gt;
             &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="ss"&gt;:@tstring_content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"!"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;33&lt;/span&gt;&lt;span class="p"&gt;]]]]],&lt;/span&gt;
          &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
          &lt;span class="kp"&gt;nil&lt;/span&gt;&lt;span class="p"&gt;]]]]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;能猜出一些，但是全部了解还是有困难（比如说&lt;code&gt;string_embexpr&lt;/code&gt;），希望能提供一些相关的文档，谢谢&lt;/p&gt;</description>
      <author>ceclinux-github</author>
      <pubDate>Fri, 03 Nov 2017 16:49:23 +0800</pubDate>
      <link>https://ruby-china.org/topics/34508</link>
      <guid>https://ruby-china.org/topics/34508</guid>
    </item>
  </channel>
</rss>
