将fixnum作为用户输入

时间:2014-10-16 11:46:26

标签: ruby input

我想知道是否有办法将用户输入作为fixnum。我可以执行类似a = gets.chomp.to_i的操作,但是在java中的nextInt()中有什么类似的ruby,或者我每次都需要进行这些转换吗?

2 个答案:

答案 0 :(得分:0)

首先,您的gets.chomp.to_i有效,但不是正确的方法。我不知道你是如何附上chomp的,但这在这里毫无意义。你应该做gets.to_i。所以,不,您不需要每次都进行转化gets.chomp.to_i

Ruby可以从终端输入接收的唯一内容是字符串。没有办法从终端接收除字符串以外的任何内容。

答案 1 :(得分:0)

当您使用输入流(如文件或终端)时,您正在处理原始字节。你永远不会直接使用原始类型。如果需要基本类型,则必须使用方法来理解字节。在许多情况下,"使用原始字节"与使用字符串同义,因此字符串类型通常具有转换方法,以从中提取类型化数据。

Java有Scanner类,它有一个nextInt()方法。它用于从文本中提取Java整数。它通过解析文本并将其转换为请求的原始数据类型来实现,在本例中为int。为了使它工作,你必须给它一个输入源。当你将它包裹在System.in时,你得到一个Scanner,它从标准输入中提取数据,标准输入通常连接到终端。

Scanner scanner = new Scanner(System.in);
int i = scanner.nextInt();

在Ruby中,我们可以简单地要求字符串尝试将自身转换为另一种类型。如果你想要一个整数:

line = gets    # reads from standard input
i = line.to_i  # converts the string to an integer

字符串' to_i方法执行非常松散的转换,如果无法计算出数字或者没有数字,则返回零。它永远不会引发异常,并且总是返回一个数字,即使没有要解析的数字。

Integer()方法执行更严格的转换。