所以我仍然在学习如何用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
我知道代码可能不起作用,我只是在脑海中创建它以澄清我的意思,但实际上是否有办法实现这一目标?
答案 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()
相同 - 调用方法。您可以在技术上定义条件内的方法(在调用它们之前),但这不是很好的风格,很少完成。
其他一些观点 -
string
参数,因此您可以删除它,就像我已经完成gets.to_i
说"获取输入并将其转换为整数" - 不是你想要做的。您正在寻找的是gets.chomp
,它会获得一行输入并从末尾删除\n
换行符(所有gets
输入最后都会有换行符)请注意,此条件链似乎是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")