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()
– 调用方法一样。 你可以在技术上定义条件内的方法(在调用它们之前),但这不是好的风格,很少完成。
其他一些观点 –
- 这些方法不使用
string
参数,所以你可以删除它,就像我做的那样 -
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")