【发布时间】:2011-09-27 05:30:36
【问题描述】:
我想用 ruby 编写一个简单的 A+B 程序,但我不知道如何使用控制台。
【问题讨论】:
我想用 ruby 编写一个简单的 A+B 程序,但我不知道如何使用控制台。
【问题讨论】:
你说的是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_i 和 b.to_i 可能会更好
gets 阻塞了吗?如果没有,是否有任何替代品阻止?
您也可以通过命令行传递参数。命令行参数存储在数组 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
【讨论】:
如果您想保留终端中的参数,请尝试以下代码:
A = ARGV[0].to_i
B = ARGV[1].to_i
puts "#{A} + #{B} = #{A + B}"
【讨论】:
有很多方法可以从用户那里获取输入。我个人喜欢 使用方法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]
【讨论】:
如果要制作交互式控制台:
#!/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 退出
【讨论】: