2016-11-08 48 views
1

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

例如:

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

如果您想要定义临时过程,请使用'lambda'或' - >'等价物。 – tadman

回答

1

呀,正常的方式做,这是从(ELSIF)有条件的定义方法事先然后调用他们:

当你说 a本身这就是等于说 a()
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 

- 调用该方法。你可以在技术上定义条件内的方法(在调用它们之前),但这不是很好的风格,很少做到。

的其他一些观点 -

  1. 这些方法不使用string参数,这样你可以删除它,就像我做
  2. 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") 
+3

'then'通常是混乱的,因为为了清晰起见,最好在他们自己的行中突出结果。 – tadman

+0

哦,很酷。非常感谢! – yukimoda