代码之家  ›  专栏  ›  技术社区  ›  Henry Yang

为什么不中断让我脱离Ruby-N循环?

  •  2
  • Henry Yang  · 技术社区  · 6 年前

    这个网站说

    n开关的作用就像您传递给ruby的代码被包装在 以下内容:

    while gets
      # code here
    end
    

    但是如果我打字 ruby -n

    和类型 return exit quit break ,为什么他们不把我从上面的无限while循环中带出来呢?

    但不知何故 end 是吗?

    $ ruby -n
    return
    break
    exit
    quit
    end
    -:5: syntax error, unexpected keyword_end, expecting end-of-input
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Henry Yang    6 年前

    当你跑步时 ruby -n ,Ruby需要来自stdin的两个不同的文件:脚本(因为您没有在参数中提供Ruby脚本名,也没有在中提供Ruby表达式) -e 以及要处理的文件(由于 -n )。因此, return 不会因为脚本还没有运行而停止脚本; 返回 脚本,您需要等待,直到开始输入下一个文件 返回 去工作。

    试试这个:

    $ ruby -n
    puts "ECHO: #{$_}"
    return if $. == 2
    <Ctrl-D>
    hello
    # => ECHO: hello
    world
    # => ECHO: world
    $
    

    unix/osx上的ctrl-d(windows上的ctrl-z)将指示文件结束,因此ruby将继续输入第二个文件。因此,前两行是脚本。结束文件后,下一行( hello )作为脚本的输入,脚本将回送它。下一行( world )继续脚本的输入,但现在行计数器 $. 显示它是输入的第二行, 返回 执行,然后脚本结束。