<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>ailms (ailms)</title>
    <link>https://ruby-china.org/ailms</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>关于 eval 操作实例变量的问题</title>
      <description>&lt;p&gt;来自 The Ruby programming 的  8.3.1&amp;nbsp; Querying, Setting, and Testing Variables&lt;/p&gt;

&lt;p&gt;Note that eval evaluates its code in a temporary scope.  eval can alter the value of
instance variables that already exist. But any new instance variables it defines are local
to the invocation of  eval and cease to exist when it returns. (It is as if the evaluated
code is run in the body of a block—variables local to a block do not exist outside the
block.)&lt;/p&gt;

&lt;p&gt;看这段话应该是新的实例变量在 eval 执行后会消失，但测试发现并没有 (&lt;a href="/z" class="user-mention" title="@z"&gt;&lt;i&gt;@&lt;/i&gt;z&lt;/a&gt;变量)&lt;/p&gt;

&lt;p&gt;[code]
irb(main):001:0&amp;gt; class Point
irb(main):002:1&amp;gt;   def initialize(x,y)
irb(main):003:2&amp;gt;     &lt;a href="/x" class="user-mention" title="@x"&gt;&lt;i&gt;@&lt;/i&gt;x&lt;/a&gt;,&lt;a href="/y" class="user-mention" title="@y"&gt;&lt;i&gt;@&lt;/i&gt;y&lt;/a&gt;=x,y
irb(main):004:2&amp;gt;   end
irb(main):005:1&amp;gt; end
=&amp;gt; nil
irb(main):006:0&amp;gt; p=Point.new(1,2)
=&amp;gt; #
irb(main):007:0&amp;gt; 
irb(main):008:0* def get_bind
irb(main):009:1&amp;gt;   binding
irb(main):010:1&amp;gt; end
=&amp;gt; nil
irb(main):011:0&amp;gt; b=p.get_bind
=&amp;gt; #&lt;a rel="nofollow" target="_blank"&gt;Binding:0x81915b0&lt;/a&gt;
irb(main):012:0&amp;gt; 
irb(main):013:0* eval("&lt;a href="/x" class="user-mention" title="@x"&gt;&lt;i&gt;@&lt;/i&gt;x&lt;/a&gt;",b)
=&amp;gt; 1
irb(main):014:0&amp;gt; 
irb(main):015:0* eval("&lt;a href="/x" class="user-mention" title="@x"&gt;&lt;i&gt;@&lt;/i&gt;x&lt;/a&gt;=10",b)
=&amp;gt; 10
irb(main):016:0&amp;gt; eval("&lt;a href="/x" class="user-mention" title="@x"&gt;&lt;i&gt;@&lt;/i&gt;x&lt;/a&gt;",b)&lt;br&gt;
=&amp;gt; 10
irb(main):017:0&amp;gt; 
irb(main):018:0* eval("&lt;a href="/z" class="user-mention" title="@z"&gt;&lt;i&gt;@&lt;/i&gt;z&lt;/a&gt;=2",b)
=&amp;gt; 2
irb(main):019:0&amp;gt; eval("&lt;a href="/z" class="user-mention" title="@z"&gt;&lt;i&gt;@&lt;/i&gt;z&lt;/a&gt;",b)&lt;br&gt;
=&amp;gt; 2
irb(main):020:0&amp;gt; p.instance_variables
=&amp;gt; [:&lt;a href="/x" class="user-mention" title="@x"&gt;&lt;i&gt;@&lt;/i&gt;x&lt;/a&gt;, :&lt;a href="/y" class="user-mention" title="@y"&gt;&lt;i&gt;@&lt;/i&gt;y&lt;/a&gt;, :&lt;a href="/z" class="user-mention" title="@z"&gt;&lt;i&gt;@&lt;/i&gt;z&lt;/a&gt;]
irb(main):021:0&amp;gt; 
irb(main):022:0* 
irb(main):023:0* 
[/code]&lt;/p&gt;</description>
      <author>ailms</author>
      <pubDate>Sun, 31 Mar 2013 22:00:16 +0800</pubDate>
      <link>https://ruby-china.org/topics/9880</link>
      <guid>https://ruby-china.org/topics/9880</guid>
    </item>
    <item>
      <title>关于 proc/lambda 对象的 arity 方法返回数量不对的问题</title>
      <description>&lt;p&gt;irb(main):067:0&amp;gt; lambda{|x=2,y| x+y}.arity
=&amp;gt; 0
irb(main):068:0&amp;gt; lambda{|x,y=2| x+y}.arity&lt;br&gt;
=&amp;gt; 1
irb(main):069:0&amp;gt; &lt;/p&gt;

&lt;p&gt;bob@bob-ruby:~$ ruby --version
ruby 1.9.3p194 (2012-04-20 revision 35410) [i686-linux]
bob@bob-ruby:~$&lt;/p&gt;

&lt;p&gt;为什么第一个返回的必须的参数是 0 个呢？&lt;/p&gt;

&lt;p&gt;The Ruby programming  &lt;/p&gt;

&lt;p&gt;In Ruby 1.8, method parameters with default values must appear after all ordinary
parameters in the parameter list. Ruby 1.9 relaxes this restriction and allows ordinary
parameters to appear after parameters with defaults&lt;/p&gt;</description>
      <author>ailms</author>
      <pubDate>Sun, 21 Oct 2012 18:03:44 +0800</pubDate>
      <link>https://ruby-china.org/topics/6214</link>
      <guid>https://ruby-china.org/topics/6214</guid>
    </item>
    <item>
      <title>关于 raise 没有被捕捉的问题</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;explode&lt;/span&gt;       
  &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="s2"&gt;"bam!"&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;rand&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="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;0&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;risky&lt;/span&gt;   

    &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;times&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;    
      &lt;span class="n"&gt;explode&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;begin&lt;/span&gt;
        &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="s2"&gt;"xxx"&lt;/span&gt;
    &lt;span class="k"&gt;rescue&lt;/span&gt; &lt;span class="no"&gt;Exception&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;f&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="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;class&lt;/span&gt;
    &lt;span class="k"&gt;end&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;defuse&lt;/span&gt;
    &lt;span class="nb"&gt;puts&lt;/span&gt; &lt;span class="n"&gt;risky&lt;/span&gt;                   
&lt;span class="k"&gt;end&lt;/span&gt;  

&lt;span class="n"&gt;defuse&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;但实际执行时打出了整个 backtrace，说明没捕捉到&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;irb(main):024:0&amp;gt; defuse
RuntimeError: bam!
        from (irb):2:in `explode'
        from (irb):8:in `block in risky'
        from (irb):7:in `times'
        from (irb):7:in `risky'
        from (irb):21:in `defuse'
        from (irb):24
        from /home/bob/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `&amp;lt;main&amp;gt;'
irb(main):025:0&amp;gt; 
&lt;/code&gt;&lt;/pre&gt;</description>
      <author>ailms</author>
      <pubDate>Tue, 02 Oct 2012 22:48:17 +0800</pubDate>
      <link>https://ruby-china.org/topics/5855</link>
      <guid>https://ruby-china.org/topics/5855</guid>
    </item>
    <item>
      <title>为什么 caller 方法在脚本中不返回任何东西呢?</title>
      <description>&lt;p&gt;&lt;img src="//l.ruby-china.com/photo/054eebb829bf2cb588396a5149d58177.jpg" title="" alt=""&gt;&lt;/p&gt;</description>
      <author>ailms</author>
      <pubDate>Fri, 28 Sep 2012 22:52:30 +0800</pubDate>
      <link>https://ruby-china.org/topics/5816</link>
      <guid>https://ruby-china.org/topics/5816</guid>
    </item>
    <item>
      <title>如何知道 Enumerator 的当前内部指针位置和前一个元素?</title>
      <description>&lt;p&gt;在看 next 或者 next_values 方法时想到的。&lt;/p&gt;

&lt;p&gt;为什么没有“返回上一个元素”或者“返回上一个元素值和下标”的方法呢？&lt;/p&gt;

&lt;p&gt;另外如果要知道当前指针的位置该怎么做呢？&lt;/p&gt;</description>
      <author>ailms</author>
      <pubDate>Sun, 16 Sep 2012 18:22:40 +0800</pubDate>
      <link>https://ruby-china.org/topics/5568</link>
      <guid>https://ruby-china.org/topics/5568</guid>
    </item>
    <item>
      <title>请问是在图形界面还是文字界面下写 ruby/ror 程序好呢?</title>
      <description>&lt;p&gt;俺是 sa 一枚，之前从来不用图形界面，都是 secureCRT + ssh + vi 写 bash 脚本，也用不到什么 vi 的插件。&lt;/p&gt;

&lt;p&gt;最近在学 ruby/ror，想请教几个问题&lt;/p&gt;

&lt;p&gt;1、是文字界面效率高，还是图形界面效率高？&lt;/p&gt;

&lt;p&gt;2、如果文字界面，那 vi 的插件能用吗？例如命令补全、自动插入语法结构这种，还是只能用于图形界面？&lt;/p&gt;

&lt;p&gt;tks！&lt;/p&gt;</description>
      <author>ailms</author>
      <pubDate>Tue, 04 Sep 2012 10:29:15 +0800</pubDate>
      <link>https://ruby-china.org/topics/5344</link>
      <guid>https://ruby-china.org/topics/5344</guid>
    </item>
  </channel>
</rss>
