<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>lilijreey (chuanshuo)</title>
    <link>https://ruby-china.org/lilijreey</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>Ruby 3.0 的类型系统能让 IDE 实现完全的智能补全吗</title>
      <description>&lt;p&gt;Ruby 3.0 的类型系统能让 IDE 实现完全的智能补全吗&lt;/p&gt;</description>
      <author>lilijreey</author>
      <pubDate>Thu, 31 Dec 2020 15:57:27 +0800</pubDate>
      <link>https://ruby-china.org/topics/40770</link>
      <guid>https://ruby-china.org/topics/40770</guid>
    </item>
    <item>
      <title>从实践谈 Ruby 语法上的几个设计不一致带来的问题。</title>
      <description>&lt;p&gt;首先这个不是黑 ruby，每个语言都有优缺点，都有历史包袱。这个只是从个人实践观点谈 ruby 的一些语法设计带来的问题。&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;以 end 为结尾的语法，相比花括号语法冗余。但是对花括号语法支持不全面，带来的风格上的不一致问题。&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt; &lt;span class="n"&gt;比如&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="nf"&gt;block&lt;/span&gt; &lt;span class="n"&gt;支持&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;...&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="n"&gt;和&lt;/span&gt;&lt;span class="p"&gt;{}&lt;/span&gt; &lt;span class="n"&gt;两种语法&lt;/span&gt;&lt;span class="err"&gt;，&lt;/span&gt; &lt;span class="n"&gt;但是模块&lt;/span&gt;&lt;span class="err"&gt;，&lt;/span&gt;&lt;span class="n"&gt;函数等定义不支持花括号&lt;/span&gt;&lt;span class="err"&gt;。&lt;/span&gt;
&lt;span class="n"&gt;导致在编程时一部分注意力需要思考到底是使用哪种方式&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;2 if 的单行形式与多行相差很大，导致编程思维不一致&lt;/p&gt;

&lt;p&gt;如果你要写 if + 单表达式的逻辑。有两种选择&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;if testExp
  exp
end&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;2 exp if testExp&lt;/p&gt;

&lt;p&gt;可以发现两种 if 对应的编程思考逻辑是完全不同的
单行的语法貌似看上去可读性很高，其实隐藏着一个大问题。因为代码应该反映·逻辑的顺序· 而是一味地最求像自然语言。这是一种舍本逐末的行为。
你会发现写单行 if 的时候 你需要先思考 if 成立后做什么，而不是 if 什么。也就是说你需要把 if 的 testExp 暂时记录到脑子里，然后思考成立后的逻辑，
写完后再把暂存在脑子里的 testExp 拿出来。这样其实加大了编程的心智负担。而且这种先 exp 在 if testExp 的语法和其他 if 格式不一致。也影响了
代码阅读的流畅性。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;几种单行if的比较&lt;/span&gt;&lt;span class="err"&gt;。&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;testExp&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt; &lt;span class="n"&gt;exp&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="c1"&gt;# 支持但是冗余&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;testExp&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;exp&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;# 不支持&lt;/span&gt;
&lt;span class="n"&gt;exp&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;testExp&lt;/span&gt; &lt;span class="c1"&gt;# 支持但是思考和书写方式又和其他if不一样&lt;/span&gt;
&lt;span class="n"&gt;testExp&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;expt&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;支持&lt;/span&gt;&lt;span class="err"&gt;，&lt;/span&gt;&lt;span class="n"&gt;但是没有if前导&lt;/span&gt; &lt;span class="n"&gt;影响阅读性&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;个人的一些感受：&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;不要意味的最求“可读性”，而丢到了逻辑正确性
因为可读性是一个相对概念，通常来说数学公式的可读性要比自然语言差。
比如但是对于专业人员看了公式的可读性很好，因为公式更短，更精确。而自然语言有更长还可能有二义性。&lt;/li&gt;
&lt;li&gt;对于语言的语法来说，尽量跟随主流 C like 风格，是一个明智的选择。语法尽量简单。&lt;/li&gt;
&lt;/ol&gt;</description>
      <author>lilijreey</author>
      <pubDate>Sun, 08 Nov 2020 16:32:48 +0800</pubDate>
      <link>https://ruby-china.org/topics/40555</link>
      <guid>https://ruby-china.org/topics/40555</guid>
    </item>
    <item>
      <title>Ruby MRI 没有走 Rubinius 的 VM 路线是核心团队技术能力有限导致的吗</title>
      <description>&lt;p&gt;首先毋庸置疑：基于纯 VM 执行的实现方式比目前 MRI 的 C+VM 混合架构技术上要更先进，更容易做性能，JIT 等方面的优化。比如 js/java 的性能远由于 pthon，ruby 版本。
所以我的问题是为啥 MRI 没有走纯 VM 的技术路线。 &lt;/p&gt;</description>
      <author>lilijreey</author>
      <pubDate>Wed, 28 Oct 2020 23:43:05 +0800</pubDate>
      <link>https://ruby-china.org/topics/40519</link>
      <guid>https://ruby-china.org/topics/40519</guid>
    </item>
    <item>
      <title>Ruby 自带的 profile 功能太弱了，根本没法用</title>
      <description>&lt;p&gt;ruby2.7 吧 profile 移出标准库导致标准库中居然没有一个性能分析工具！不知道核心团队是咋想的。而且 profile 的功能基本和没有一样。 
大家如何分析 ruby 程序耗时问题&lt;/p&gt;</description>
      <author>lilijreey</author>
      <pubDate>Tue, 27 Oct 2020 00:45:19 +0800</pubDate>
      <link>https://ruby-china.org/topics/40513</link>
      <guid>https://ruby-china.org/topics/40513</guid>
    </item>
    <item>
      <title>使用 2.7.1 后性能和内存消耗都变差了</title>
      <description>&lt;p&gt;大家遇到过没，我打比赛相同的代码在 2.7.1 上成绩差了不少
话说 ruby VM 啥时候能优化的和 JVM 差不多就可以了&lt;/p&gt;</description>
      <author>lilijreey</author>
      <pubDate>Mon, 14 Sep 2020 22:55:59 +0800</pubDate>
      <link>https://ruby-china.org/topics/40405</link>
      <guid>https://ruby-china.org/topics/40405</guid>
    </item>
    <item>
      <title>Ruby 3 将于圣诞节发布，松本行弘分享编程语言的困境</title>
      <description>&lt;p&gt;&lt;a href="https://www.oschina.net/news/118406/ruby-3-will-release-in-1225?utm_source=new_idx" rel="nofollow" target="_blank"&gt;https://www.oschina.net/news/118406/ruby-3-will-release-in-1225?utm_source=new_idx&lt;/a&gt;&lt;/p&gt;</description>
      <author>lilijreey</author>
      <pubDate>Sun, 06 Sep 2020 23:39:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/40371</link>
      <guid>https://ruby-china.org/topics/40371</guid>
    </item>
    <item>
      <title>求助 关于二进制字符串的匹配问题</title>
      <description>&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&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;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&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;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;pa&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;pack&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"C*"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;pa&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\x01\x02&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="c1"&gt;# false why?&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src="https://l.ruby-china.com/photo/2020/542cb3af-c3d1-4f32-9172-7fba728a51be.png!large" title="" alt=""&gt;
 为何 返回 false&lt;/p&gt;</description>
      <author>lilijreey</author>
      <pubDate>Sun, 30 Aug 2020 14:41:04 +0800</pubDate>
      <link>https://ruby-china.org/topics/40341</link>
      <guid>https://ruby-china.org/topics/40341</guid>
    </item>
    <item>
      <title>Ruby 有类似 python 中 @functools.lru_cache 的这种机制吗</title>
      <description>&lt;p&gt;如上，不清楚 python 的注解机制，但是貌似 ruby 好像没有&lt;/p&gt;</description>
      <author>lilijreey</author>
      <pubDate>Sat, 22 Aug 2020 22:04:15 +0800</pubDate>
      <link>https://ruby-china.org/topics/40318</link>
      <guid>https://ruby-china.org/topics/40318</guid>
    </item>
    <item>
      <title>感觉 Ruby 缺少显式创建引用的功能,有没有大佬可以给核心开发者建议添加一下</title>
      <description>&lt;p&gt;ruby 中有值和引用语义.
比如 数字都是值语义也就是说&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="c1"&gt;# 值拷贝&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="c1"&gt;#a 还是1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;很多时候这种设定是希望的行为.
但是如果我们希望 b 是 a 的引用这种语义时，ruby 好像没法做到.
是否可以在 ObjectBase 对象上添加 .ref 方法。这个方法返回该对象的引用
这样我们就可以&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ref&lt;/span&gt; &lt;span class="c1"&gt;# 创建引用&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;
&lt;span class="c1"&gt;#a 也是4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果有了主动创建 ref 语义的功能，可以优化很多算法的性能
比如。&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&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;3&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="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="c1"&gt;#现在想从 a[2] 开始找是否有元素1出现&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;这样可以但是会创建一个临时对象&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;很不划算&lt;/span&gt;
&lt;span class="n"&gt;如果用ref&lt;/span&gt;
&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;ref&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;这样就是在a自己身上做搜索&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;之后生成一个代价很小的引用对象&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;没有大量元素复制&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="n"&gt;性能会提高几十倍不止&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;大家怎么看&lt;/p&gt;</description>
      <author>lilijreey</author>
      <pubDate>Sat, 15 Aug 2020 20:02:21 +0800</pubDate>
      <link>https://ruby-china.org/topics/40287</link>
      <guid>https://ruby-china.org/topics/40287</guid>
    </item>
    <item>
      <title>请大佬推荐一些介绍 CRuby 实现的材料,感激不尽</title>
      <description>&lt;p&gt;最近打算法比赛，基本都用 ruby. 
对于字符串的 'hello'.each_char {|e| ...}  函数性能比较疑惑.
不知道参数 e 是否每次都生成一个临时 string 对象。所以想深入了解一下 ruby 相关实现.
请大佬们推荐一些相关资料。感谢&lt;/p&gt;</description>
      <author>lilijreey</author>
      <pubDate>Sat, 15 Aug 2020 12:40:30 +0800</pubDate>
      <link>https://ruby-china.org/topics/40285</link>
      <guid>https://ruby-china.org/topics/40285</guid>
    </item>
    <item>
      <title>在一个函数内定义另一个函数性能方面是否和非嵌套性能相同</title>
      <description>&lt;p&gt;有时候写递归算法时往往小创建一个递归算法的函数，但是又不想写到外面
所以会这样写&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;xxx&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;xxx_impl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
     &lt;span class="o"&gt;...&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
     &lt;span class="nf"&gt;xxx_imple&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="n"&gt;xxx_impl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;请问这种方式有性能上的问题吗&lt;/p&gt;</description>
      <author>lilijreey</author>
      <pubDate>Thu, 06 Aug 2020 10:16:31 +0800</pubDate>
      <link>https://ruby-china.org/topics/40242</link>
      <guid>https://ruby-china.org/topics/40242</guid>
    </item>
    <item>
      <title>Ruby 数组如何返回一段元素的引用,而不是拷贝.</title>
      <description>&lt;p&gt;如何实现如下功能&lt;/p&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&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;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&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="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
 &lt;span class="n"&gt;期望a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;也是100&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Array 的 slice 函数和中括号语法有什么区别吗，&lt;/p&gt;</description>
      <author>lilijreey</author>
      <pubDate>Wed, 05 Aug 2020 01:01:06 +0800</pubDate>
      <link>https://ruby-china.org/topics/40230</link>
      <guid>https://ruby-china.org/topics/40230</guid>
    </item>
    <item>
      <title>Ruby 标准库中缺少 rbtree， 严重影响开箱即用，谁能帮忙给核心开发者提议加入 rbtree。</title>
      <description>&lt;p&gt;rbtree 之前 1.9 的时候就有人开发了 patch，到了 2.6 直接被否决了。但是 rbtree 很常用，标准库没有还是很蛋疼的。尤其是设计算法的时候。哪位大佬可以帮忙给核心开发团队提提意见&lt;/p&gt;</description>
      <author>lilijreey</author>
      <pubDate>Tue, 28 Jul 2020 19:54:17 +0800</pubDate>
      <link>https://ruby-china.org/topics/40208</link>
      <guid>https://ruby-china.org/topics/40208</guid>
    </item>
    <item>
      <title>当前环境有多个不同版本 gem require 默认会用哪个？</title>
      <description>&lt;p&gt;为了修改一个开源 gem elftools-1.1.0 我又在加载路径下新增了一个 elftools-1.2.0 如果现在 require 'elftools' 那么会 load 那个版本呢？&lt;/p&gt;</description>
      <author>lilijreey</author>
      <pubDate>Sun, 03 Feb 2019 18:28:57 +0800</pubDate>
      <link>https://ruby-china.org/topics/38083</link>
      <guid>https://ruby-china.org/topics/38083</guid>
    </item>
    <item>
      <title>block 如果只有一个参数能否省略，直接使用_ 表示。 向 Scala 类似</title>
      <description>&lt;pre class="highlight ruby"&gt;&lt;code&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;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&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;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;# 这样可以吗&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>lilijreey</author>
      <pubDate>Sun, 03 Feb 2019 09:22:39 +0800</pubDate>
      <link>https://ruby-china.org/topics/38080</link>
      <guid>https://ruby-china.org/topics/38080</guid>
    </item>
    <item>
      <title>为何 env irb 比直接执行 irb 启动块的多</title>
      <description>&lt;p&gt;直接执行 Irb 至少等待 4 到 5 秒
执行 env irb 2 秒即可打开
哪位同学知道原因，我的机器上装了 rvm 
 whereis irb&lt;br&gt;
irb: /usr/bin/irb2.3 /usr/bin/irb /home/god/.rvm/rubies/ruby-2.2.3/bin/irb /usr/share/man/man1/irb.1.gz&lt;/p&gt;

&lt;p&gt;我记得 bash 有一种技巧可以记住程序的路径，而不用搜索 PATH，但是忘了。哪位大大知道，说一下啊&lt;/p&gt;</description>
      <author>lilijreey</author>
      <pubDate>Wed, 26 Dec 2018 22:57:43 +0800</pubDate>
      <link>https://ruby-china.org/topics/37950</link>
      <guid>https://ruby-china.org/topics/37950</guid>
    </item>
    <item>
      <title>如何返回一个成员变量的引用</title>
      <description>&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;X&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;initialize&lt;/span&gt;
&lt;span class="vi"&gt;@nilv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;nil&lt;/span&gt;
&lt;span class="vi"&gt;@strv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"hello"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_nilv&lt;/span&gt;
  &lt;span class="vi"&gt;@nilv&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_strv&lt;/span&gt;
 &lt;span class="vi"&gt;@strv&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test&lt;/span&gt;
  &lt;span class="n"&gt;get_nilv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="c1"&gt;# error why&lt;/span&gt;
  &lt;span class="n"&gt;get_strv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="n"&gt;oo&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt; &lt;span class="c1"&gt;# error&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>lilijreey</author>
      <pubDate>Fri, 19 Oct 2018 11:45:31 +0800</pubDate>
      <link>https://ruby-china.org/topics/37648</link>
      <guid>https://ruby-china.org/topics/37648</guid>
    </item>
    <item>
      <title>Ruby 不用花括号表达代码块，是一个设计缺陷吗</title>
      <description>&lt;p&gt;花括号 {} 只能在一行中使用，如果跨越多行则需要使用 do ... end, 感觉不同意，而且没有感觉 do...end 有什么好处。
修正：花括号和 do..end 可以相互替代。上面的说法不对。&lt;/p&gt;</description>
      <author>lilijreey</author>
      <pubDate>Wed, 17 Oct 2018 19:37:29 +0800</pubDate>
      <link>https://ruby-china.org/topics/37639</link>
      <guid>https://ruby-china.org/topics/37639</guid>
    </item>
    <item>
      <title>求解释， [a,b].max 比调用 max 函数快 </title>
      <description>&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;maxa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;10000000&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;maxf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;10000000&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="n"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
  &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;pry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Benchmark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;measure&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;maxa&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;#&amp;lt;Benchmark::Tms:0x00000002ed1000 @cstime=0.0, @cutime=0.0, @label="", @real=0.4200649199774489, @stime=0.0, @total=0.42000000000000004, @utime=0.42000000000000004&amp;gt;&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="n"&gt;pry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Benchmark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;measure&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;maxf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;#&amp;lt;Benchmark::Tms:0x00000002f217d0 @cstime=0.0, @cutime=0.0, @label="", @real=0.6093627649825066, @stime=0.0, @total=0.6, @utime=0.6&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;为何 [a,b].max 这种需要创建数组的情况比 直接调用函数，无需创建临时数组的方式还要快，不科学啊。&lt;/p&gt;</description>
      <author>lilijreey</author>
      <pubDate>Tue, 16 Oct 2018 21:54:31 +0800</pubDate>
      <link>https://ruby-china.org/topics/37634</link>
      <guid>https://ruby-china.org/topics/37634</guid>
    </item>
    <item>
      <title>range 展开为何比 while 慢很多</title>
      <description>&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;rran&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;..&lt;/span&gt;&lt;span class="mi"&gt;10000000&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;each&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
    &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;tfor&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
  &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
  &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;10000000&lt;/span&gt;
    &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="o"&gt;+=&lt;/span&gt;&lt;span class="n"&gt;n&lt;/span&gt;
  &lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="k"&gt;end&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;148&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;pry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Benchmark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;measure&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;tfor&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;#&amp;lt;Benchmark::Tms:0x000000029cf458&lt;/span&gt;
 &lt;span class="vi"&gt;@cstime&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="vi"&gt;@cutime&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="vi"&gt;@label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="vi"&gt;@real&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.22141856199596077&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="vi"&gt;@stime&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="vi"&gt;@total&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.21999999999999997&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="vi"&gt;@utime&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.21999999999999997&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;149&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="n"&gt;pry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="no"&gt;Benchmark&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;measure&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;rran&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;                                                              
&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="c1"&gt;#&amp;lt;Benchmark::Tms:0x00000002969388&lt;/span&gt;
 &lt;span class="vi"&gt;@cstime&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="vi"&gt;@cutime&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="vi"&gt;@label&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="vi"&gt;@real&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.3831686199409887&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="vi"&gt;@stime&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="vi"&gt;@total&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.3700000000000001&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
 &lt;span class="vi"&gt;@utime&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.3700000000000001&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如图 for 版本的循环比 range 版本的快很多。按道理应该是一样快才对啊。请大牛解释一下&lt;/p&gt;</description>
      <author>lilijreey</author>
      <pubDate>Tue, 16 Oct 2018 21:42:11 +0800</pubDate>
      <link>https://ruby-china.org/topics/37633</link>
      <guid>https://ruby-china.org/topics/37633</guid>
    </item>
  </channel>
</rss>
