gpt4 book ai didi

ruby - 没有将 String 隐式转换为 Integer (TypeError) 为什么会这样?

转载 作者:太空宇宙 更新时间:2023-11-03 16:13:19 26 4
gpt4 key购买 nike

我正在编写一个读取 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]

关于ruby - 没有将 String 隐式转换为 Integer (TypeError) 为什么会这样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54715895/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com