【问题标题】:Read input from console in Ruby?从 Ruby 中的控制台读取输入?
【发布时间】:2011-09-27 05:30:36
【问题描述】:

我想用 ruby​​ 编写一个简单的 A+B 程序,但我不知道如何使用控制台。

【问题讨论】:

    标签: ruby console


    【解决方案1】:

    你说的是gets吗?

    puts "Enter A"
    a = gets.chomp
    puts "Enter B"
    b = gets.chomp
    c = a.to_i + b.to_i
    puts c
    

    类似的东西?

    更新

    Kernel.gets 尝试读取在ARGV 中找到的参数,如果没有找到ARGV,则只要求控制台。即使ARGV 不为空,也要强制从控制台读取,请使用STDIN.gets

    【讨论】:

    • 我与此解决方案有冲突:Kernel.gets 尝试读取在ARGV 中找到的文件,如果没有找到ARGV,则只要求控制台。即使ARGV 不为空,也要强制从控制台读取,请使用STDIN.gets
    • a.to_ib.to_i 可能会更好
    • gets 阻塞了吗?如果没有,是否有任何替代品阻止?
    • @fguillen 这是一个很好的答案,不应该隐藏在 cmets 中。请问你能不能给个答案?谢谢!
    • @Yar 感谢您的建议,我已在答案本身中添加了 update
    【解决方案2】:

    您也可以通过命令行传递参数。命令行参数存储在数组 ARGV 中。所以 ARGV[0] 是第一个数字, ARGV[1] 是第二个数字

    #!/usr/bin/ruby
    
    first_number = ARGV[0].to_i
    second_number = ARGV[1].to_i
    
    puts first_number + second_number
    

    你这样称呼它

    % ./plus.rb 5 6
    ==> 11
    

    【讨论】:

      【解决方案3】:

      如果您想保留终端中的参数,请尝试以下代码:

      A = ARGV[0].to_i
      B = ARGV[1].to_i
      
      puts "#{A} + #{B} = #{A + B}"
      

      【讨论】:

        【解决方案4】:

        有很多方法可以从用户那里获取输入。我个人喜欢 使用方法gets。当你使用gets时,它会得到string 您键入的内容,其中包括您按下的 ENTER 键 结束您的输入。

        name = gets
        "mukesh\n"
        

        您可以在 irb 中看到这一点;输入这个,你会看到 \n,这是 ENTER 键产生的“换行符”: 输入name = gets 你会看到类似"mukesh\n" 您可以使用 chomp 方法摆脱讨厌的 newline 字符。

        chomp 方法返回字符串,但没有终止换行符。美丽的chomp法救世主。

        name = gets.chomp
        "mukesh"
        

        您也可以使用终端来读取输入。 ARGV 是定义在 Object class 中的常量。它是 Array 类 的一个实例,可以访问所有数组方法。由于它是一个数组,即使它是一个常量,它的元素也可以轻松修改和清除。默认情况下,当命令行二进制文件被调用时,Ruby 会捕获所有传递给 Ruby 程序的命令行参数(由空格分隔),并将它们作为字符串存储在 ARGV 数组中。

        在您的 Ruby 程序中编写时,ARGV 将采用如下所示的命令行命令:

        test.rb hi my name is mukesh
        

        并创建一个如下所示的数组:

        ["hi", "my", "name", "is", "mukesh"]
        

        但是,如果我想传递有限的输入,那么我们可以使用这样的东西。

        test.rb 12 23
        

        并在您的程序中像这样使用这些输入:

        a = ARGV[0]
        b = ARGV[1]
        

        【讨论】:

          【解决方案5】:

          如果要制作交互式控制台:

          #!/usr/bin/env ruby
          
          require "readline"
          addends = []
          while addend_string = Readline.readline("> ", true)
            addends << addend_string.to_i
            puts "#{addends.join(' + ')} = #{addends.sum}"
          end
          

          用法(假设你把上面的sn-p放到当前目录下的summator文件中):

          chmod +x summator
          ./summator
          > 1
          1 = 1
          > 2
          1 + 2 = 3
          

          使用Ctrl + D 退出

          【讨论】:

            猜你喜欢
            • 2011-10-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-05-08
            • 1970-01-01
            相关资源
            最近更新 更多