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

Ruby代码方法重复调用问题:为何重复请求年龄与姓名

问题分析

你的代码之所以会重复请求输入,核心有两个问题:

  • 在main函数里,你调用了get_age()和get_string()但没保存返回值,这两次调用完全是白忙活,没有把获取到的年龄和姓名传递给后续要用的地方。
  • print_year_born函数的参数名取成了get_age(和获取年龄的函数重名,极易混淆),而且你调用它的时候传的是get_age(函数本身),不是之前获取到的年龄值。更糟的是,这个函数内部还调用了get_string(),导致再次触发姓名输入;同时函数里计算年份时用的get_age会重新执行get_age()函数,再次触发年龄输入。
修正方案

不需要全局变量,只要把获取到的输入值保存下来,传递给需要使用的函数就行:

require 'date'

def get_age()
  puts("Enter your age in years: ")
  age = gets.to_i()
  return age
end

def get_string()
  puts("Enter your name: ")
  s = gets.chomp()
  return s
end

# 修改函数,接收年龄和姓名作为参数
def print_year_born(age, name)
  year_born = Date.today.year - age
  puts("#{name} You were born in: #{year_born}")
end

def main()
  # 保存获取到的年龄和姓名
  user_age = get_age()
  user_name = get_string()
  # 把值传给print_year_born
  print_year_born(user_age, user_name)
end

main()
核心改动说明
  • 在main里用变量保存get_age()和get_string()的返回值,确保获取到的输入能被后续使用。
  • 调整print_year_born的参数,让它直接接收已经获取到的年龄和姓名,不再内部调用输入函数。
  • 使用Ruby的字符串插值#{}让输出代码更简洁易读(当然你也可以继续用字符串拼接,只是插值更优雅)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 23:25:17