You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中yield实现数值翻倍时出现字符串重复而非翻倍的问题求助

问题原因

你遇到的问题根源是gets.chomp返回的是字符串类型,而非整数。Ruby中不同类型的乘法逻辑完全不同:

  • 字符串与数字相乘:会将字符串重复对应次数,比如"3" * 2结果是"33"
  • 整数与数字相乘:才会执行数值运算,比如3 * 2结果是6

你用整数替换gets.chomp时能正常工作,就是因为此时传入的是整数类型,触发了数值乘法逻辑。

解决方案

有两种简单的修复方式,推荐第一种(输入阶段转换类型,逻辑更清晰):

方式1:获取输入时转换为整数

把gets.chomp改成gets.chomp.to_i,这样传给double方法的就是整数了:

def double(i)
  puts "Type a number!"
  yield(i)
  puts "Look at that! It's doubled!"
end

double(gets.chomp.to_i) {|i| puts i*2}

方式2:在代码块内转换类型

如果不想修改输入获取的部分,也可以在块里把参数转为整数再计算:

def double(i)
  puts "Type a number!"
  yield(i)
  puts "Look at that! It's doubled!"
end

double(gets.chomp) {|i| puts i.to_i * 2}

如果需要处理非数字输入(比如用户输入字母),可以额外加个判断,但作为新手阶段,先搞定类型转换就能解决当前问题。

内容的提问来源于stack exchange,提问作者John Stowers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 09:18:28