我正在编写一个读取 3 个整数的代码,第一个整数是低区间,第二个整数是高区间,第三个整数给出将要显示的随机数的数量,我收到错误
no implicit conversion of String into Integer (TypeError)
为什么?我以为是它的 Consant 类型导致了问题,但它改变了它,它仍然说同样的错误:
Interval00, Interval01, Interval02 = gets.chomp.split(&:to_i)
puts "#{Interval00} #{Interval01} #{Interval02}"
array = (Interval00...Interval01).to_a.shuffle.take(Interval02)
array.each do |output| puts output end
在 Ruby v2.6 之前 String#split
不接受可选 block 。 v2.6 改变了这一点。 v2.6 文档的最后一句话 String#split状态,“如果给出了一个 block ,则使用每个拆分子字符串调用该 block 。”该文档还显示返回接收者 str
。
在下面的代码中,我在所有情况下都输入了字符串 "1 2 3"
。人们可能期望 block 的存在意味着
gets.split { |s| s.to_i }
#=> "1 2 3\n"
与
相同
gets.split.map { |s| s.to_i }
#=> [1, 2, 3]
但显然不是,文档也没有声明是。如果存在一个 block ,split
返回它的接收者,这里是 "1 2 3\n"
并且 block 只执行计算,很像 每个
。
下面是一个如何使用 block 的简单示例。
a = []
gets.split { |s| a << s.to_i }
#=> "1 2 3\n"
a #=> [1, 2, 3]
我是一名优秀的程序员,十分优秀!