2016-04-25 37 views
0

私はRubyのメソッドの中でメソッドを呼び出す方法を理解しようとしています。メソッド内でメソッドを呼び出すruby

はここに私のコードです:

def testNegative number 
    if number < 0 # No negative numbers. 
    return 'Please enter a number that isn\'t negative.' 
    end 
end 

def testIfZero number 
    if number == 0 
    return 'zero' 
    end 
end 

def englishNumber number 
    testNegative(number) 
    testIfZero(number) 
end 

puts englishNumber -1 
puts englishNumber 0 

現在、私は取得しています出力は、空行とし、「ゼロ」です。私はput englishNumber -1の出力として「なぜ否定的ではない番号を入力してください」と表示されないのだろうと思っていました。 「負でない番号を入力してください」という返事が返ってプログラムが終了するように、どうすれば修正できますか?

答えて

1

私の答えでは、ラクダの代わりにラクダの代わりにアンダースコアを使用します。

test_negativeは値を返していますが、english_numberは値で何も処理していないため、コードが正しく機能しません。あなたはenglish_numberに変更することができます:test_negativeが非ゼロと非偽の値を返す場合

def english_number(number) 
    test_negative(number) or test_if_zero(number) 
end 

その方法を、そしてenglish_numberは、その戻り値としてではなくtest_if_zeroを実行している気にすることを使用します。

その後、あなたはenglish_numberに、コードの複数行を追加する必要がある場合、あなたはこのようにそれを行うことができます:あなたが実際に例外を使用する場合がありますようにところで

def english_number(number) 
    error_message = test_negative(number) || test_if_zero(number) 
    return error_message if error_message 

    # More lines of code here 
end 

、それが聞こえます。例外を発生させると、プログラムは終了し、例外を捕まえて処理することを除いて、例外メッセージがユーザーに出力されます。 testNegative(number)最初

def test_negative(number) 
    if number < 0 # No negative numbers. 
    raise 'Please enter a number that isn\'t negative.' 
    end 
end 
+0

を私はプログラムは英語番号の最初の呼び出しで終了する必要はありませんので、キーワードの昇給が私のために動作しません追加。今追加したり、今のところ働いている解決策ですが、コードの最後の行ではなくなっても、最初の行のように無視されてしまいます。 – MattGoldwater

+0

Gwater17:答えを編集して、 'english_number'にもっと多くのコード行を追加する方法を示しました。しかし、私はまだ将来の読者の利益のためにそこに例外の言及を残しました。 –

0

あなたのコード

def englishNumber number 
    testNegative(number) 
    testIfZero(number) 
end 

呼び出し、結果を無視:私はtest_negativeに変更します。

次に、testIfZero(number)を呼び出し、呼び出し元に結果を返します。

englishNumber -1の場合、testIfZero(number)の結果はnilであり、putsは空の行を書き込みます。

englishNumber 0の場合は、期待される文字列'zero'が得られます。


あなたがor条件(または||)で結果を返す必要があり、代替として結果が必要な場合。

完全な例:

def testNegative number 
    if number < 0 # No negative numbers. 
    return 'Please enter a number that isn\'t negative.' 
    end 
end 

def testIfZero number 
    if number == 0 
    return 'zero' 
    end 
end 

def englishNumber number 
    testNegative(number) or testIfZero(number) 
end 

puts englishNumber -1 
puts englishNumber 0 

または代替構文を持つ:

def testNegative number 
    return 'Please enter a number that isn\'t negative.' if number < 0 # No negative numbers. 
end 

def testIfZero number 
    return 'zero' if number == 0 
end 

def englishNumber number 
    testNegative(number) || testIfZero(number) 
end 

puts englishNumber -1 
puts englishNumber 0 

私は私はあなたのコメントが正しい理解かどうかわからないんだけど、多分あなたは、このような解決策を探しています:

def testNegative number 
    puts 'Please enter a number that isn\'t negative.' if number < 0 # No negative numbers. 
end 

def testIfZero number 
    puts 'zero' if number == 0 
end 

def englishNumber number 
    testNegative(number) 
    testIfZero(number) 
end 

englishNumber -1 
englishNumber 0 

putsコマンドは、メソッド内で使用することもできますが、結果を返す必要はありません。質問の範囲外


備考:メソッド内のメソッド呼び出しの使用量は、最も簡単な解決策ではありません(私はあなたがメソッド呼び出しの使用状況を確認したいと思います)。

私が使用します。

def english_number number 

    if number < 0 # No negative numbers. 
    return 'Please enter a number that isn\'t negative.' 
    elsif number == 0 
    return 'zero' 
    end 
end 
+0

私はそれを得る。私はちょうど最初の行の結果が無視されない方法を見つけたいと思う。何か私にできることはありますか? – MattGoldwater

+0

[Davids Answer](http://stackoverflow.com/a/36850553/676874)の 'test_negative(number)またはtest_if_zero(number)'はあなたの質問に答える必要があります。 – knut

+0

その解決策の問題は、私がそこでプログラムを終了するだけで私の問題に答えることです。 'test_negative(number)またはtest_if_zero(number)'がプログラムの最後の行ではなくなると、それらの関数の結果は無視されます。 – MattGoldwater

関連する問題