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
相关产品推荐
相关产品推荐

