获取用户输入后数组中每个元素的输出 class,Ruby

Output class of each element in array after getting user input, Ruby

我有一个小程序接受用户输入的由空格分隔的多个整数,例如:4 5 6 7

然后我将它推入一个数组,并希望找到数组中每个元素的 class,我希望它是一个字符串,因为我正在使用 gets 命令。我正在使用 .each 迭代器来执行此操作,但是在下面的代码中,当我 puts output.class 我得到一个数组输出而不是四个字符串输出。

有人能指出我做错了什么吗?

values = []

puts "enter segment values separated by spaces: "
entry = gets.split
values << entry


values.each do |output|
    puts output.class
end

entry 是一个数组,因此,values 数组只包含一个恰好是 entry 数组的元素。

要解决此问题,您可以将 values << entry 替换为:

values.push *entry

说明

Array#<< 方法将单个对象压入数组。在您的情况下,您正在推送 entry 数组,因此,它被作为单个元素推送。

如果你想压入 entry 数组的每个单独元素,那么,使用 splat 运算符 (*) 将允许我们将数组转换为方法的多个参数。不幸的是,<< 接受单个参数,如果我们这样做会出错:

values << *entry
#=> main.rb:5: syntax error, unexpected *
#    values << *entry
               ^

还有另一种方法,Array#push,可以传递可变数量的对象并将每个对象推入数组。因此,最终代码将如下所示:

values.push *entry