2016-11-08 9 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)の条件からそれらを事前にその後のメソッドを定義呼び出すことです:

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. あなたはそれを削除することができますので、私は
  2. gets.to_iをやったように、これらのメソッドは、stringパラメータを使用しない「とは、入力を取得し、それを整数に変換する」と言っています - あなたがここでやりたいことではありません。あなたが探しているのは、この条件付きチェーンは、Aのように思える入力の行を取得し、端から\n改行文字を削除しgets.chomp、(すべての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

関連する問題