Ruby -在不希望重复的情况下编写重复的方法

p8h8hvxi  于 2022-11-22  发布在  Ruby
关注(0)|答案(1)|浏览(106)

我试图理解为什么这段代码重复了两次age和name方法。当我运行代码时,它要求输入age和name,但是,它又要求输入name和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(get_age)
  year_born = Date.today.year - get_age
  puts(get_string + "\sYou were born in: " + year_born.to_s)
end

def main()
  get_age()
  get_string()
  print_year_born(get_age)
end

main()

我错过了什么?

mspsb9vt

mspsb9vt1#

它被调用了两次,因为你调用了它两次。在main的第1行,你调用get_age()并丢弃它返回的值。然后在第3行,你调用print_year_born(get_age),它再次调用get_age,但这次传递返回给print_year_born的值。
你似乎对方法的工作方式有些困惑。每次你输入get_age,你都在调用方法。你不必在第1行和第2行单独调用方法,那些简单的调用(get_age()/get_string())是完全多余的。它们调用方法,但对返回的值完全不做任何事情。
现在还不清楚你认为主发球中的前两行有什么用途,但你应该把它们去掉:

def main()
  get_age()    # Wrong: call get_age and ignore return value. Why?
  get_string() # Wrong: call get_string and ignore return value. Why? 
  
  # Correct: call get_age and use the return value as an argument to print_year_born
  print_year_born(get_age)
end

相关问题