Ruby调用基于elseif语句的方法

所以我仍然在学习如何使用Ruby进行编码,而且我遇到了一些我很好奇的新东西。 我的老师刚开始教我们方法,我想知道你是否可以调用/创建一个基于if-else语句的方法。 例如,如果您有一个程序要求用户键入某人的名字,那么您可以使用该输入来决定使用哪种方法吗?

例:

puts "Please enter name(Brian, Andy, Tod)" string = gets.to_i if string == "Brian" def b(string) puts "Hi Brian" return b elsif string == "Andy" def a(string) puts "Hi Andy" return a elsif string == "Tod" def t(string) puts "Hi Tod" return t else puts "Not a valid entry" end 

我知道代码可能不起作用,我只是创建它以澄清我的意思,但实际上是否有办法做到这一点?

是的,执行此操作的常规方法是事先定义方法,然后从(elsif)条件调用它们:

 def b puts "Hello brian" end def a puts "Hello andy" end def t puts "Hello tod" end puts "Please enter name(Brian, Andy, Tod)" string = gets.chomp if string == "Brian" b elsif string == "Andy" a elsif string == "Tod" t else puts "Not a valid entry" end 

当你说a本身就像说a() – 调用方法一样。 你可以在技术上定义条件内的方法(在调用它们之前),但这不是好的风格,很少完成。

其他一些观点 –

  1. 这些方法不使用string参数,所以你可以删除它,就像我做的那样
  2. gets.to_i说“获取输入并将其转换为整数” – 而不是你想在这里做什么。 你正在寻找的是gets.chomp ,它获取一行输入并从末尾删除\n换行符(所有输入将在末尾有一个换行符)

请注意,这个条件链似乎是一个很好的候选case ,你可以将puts重构为一个地方 –

 def b "Hello brian" end def a "Hello andy" end def t "Hello tod" end input = gets.chomp puts case input when "Brian" then b when "Andy" then a when "Tod" then t else "not a valid entry" end 

或者您可以使用哈希结构而不是方法

 puts { "Brian" => "Hello brian", "Andy" => "Hello andy", "Tod" => "Hello tod" }.fetch(gets.chomp, "Invalid input")