Ruby调用基于elseif语句的方法

时间:2016-11-08 03:51:29

标签: ruby if-statement methods

所以我仍然在学习如何用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

我知道代码可能不起作用,我只是在脑海中创建它以澄清我的意思,但实际上是否有办法实现这一目标?

1 个答案:

答案 0 :(得分:1)

是的,正常的方法是事先定义方法,然后从(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换行符(所有gets输入最后都会有换行符)
  3. 请注意,此条件链似乎是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")
    
相关问题