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