【问题标题】:In Ruby, how does puts _|_ work?在 Ruby 中, puts _|_ 是如何工作的?
【发布时间】:2015-08-05 12:03:21
【问题描述】:

我对 puts _|_ 在 Ruby 中的工作方式感到困惑。如果你输入一个变量然后调用那个语句

3
puts _|_

你得到变量的名称,后跟 nil

 3
 => nil

但是,如果你再次输入,你会得到错误

puts _|_
=> false

它看起来不像是那些以美元符号开头的类似 Perl 的变量之一。

这个奇怪的符号到底是什么意思,它是如何工作的?

【问题讨论】:

    标签: ruby irb puts


    【解决方案1】:

    控制台(IRB 或 pry)中的下划线代表上一个命令的结果。所以

    3
    => 3
    puts _|_
    3
    => nil
    

    这里上面的puts语句就变成了

    puts 3 <bit-wise or> 3
    

    其中puts 3|3 等于puts 3

    由于puts返回nil,当你重复puts _|_时,它就变成了

    puts nil|nil
    

    ...这是puts false

    【讨论】:

      【解决方案2】:

      在 ruby​​ 中,_ 是一个有效的标识符。

      IRB _ 中包含最后一个表达式的值。

      2.1.5 :001 > 100
       => 100
      2.1.5 :002 > _
       => 100
      

      【讨论】:

        【解决方案3】:

        _是一个ruby特殊变量,用来获取前面表达式的结果。

        irb(main):030:0> 3
        => 3
        irb(main):031:0> _
        => 3
        irb(main):032:0> _.to_s
        => "3"
        irb(main):033:0> _
        => "3"
        

        名称以小写字母 (a-z) 或下划线 (_) 开头的 ruby​​ 变量是局部变量或方法调用。未初始化的实例变量的值为 nil。

        irb(main):001:0> _
        => nil
        irb(main):002:0> _ | _
        => false
        irb(main):003:0> nil | nil
        => false
        

        【讨论】:

          【解决方案4】:

          _ 是一个 ruby​​ 特殊变量,这个变量存储了前一个表达式/命令的输出,所以当你这样做时:

          1.9.3-p0 :043 > 3
           => 3
          

          '_'包含值3,因为前一个表达式的返回值是3。当你使用puts时如下:

          1.9.3-p0 :045 > puts _|_
          3
           => nil
          

          它的返回值为nil。下次执行|时如下:

          1.9.3-p0 :049 > _|_
           => false
          

          它返回false,因为它与下面的表达式相同:

          1.9.3-p0 :050 > nil|nil
           => false
          

          这就是为什么 puts | 返回 false。

          【讨论】:

            猜你喜欢
            • 2017-05-14
            • 1970-01-01
            • 2011-02-17
            • 2012-12-18
            • 1970-01-01
            • 1970-01-01
            • 2012-02-18
            • 1970-01-01
            • 2012-12-26
            相关资源
            最近更新 更多