2017-01-16 10 views
1

"then"セクションを 'If?'セクションに追加しないと、最初の2つのテストケースで次のコードが期待される出力を生成できないのはなぜですか?私は2番目の変数 "False"のデフォルト値を設定しました。Rubyではメソッドが不特定多数のパラメータを取る可能性があり、メソッドが呼び出されたときにパラメータがないと、デフォルト値設定されている場合は、メソッド内のそのパラメータの値を返します。RubyでIf/Then構造体がIf/Then構造体を使用しないで記述されているのはなぜですか?

def alphabetize(arr,rev=false) 
    arr.sort! 
    if rev == true 
     arr.reverse! 
    end 
end 

numbers = [1,9,2,1,10] 

テストケース:

print alphabetize(numbers,false) 
=begin 
input: numbers,false 
output: nil 
expected output: 1,1,2,9,10 
=end 

print alphabetize(numbers) 
=begin 
input: numbers 
output: nil 
expected output 1,1,2,9,10 
=end 

print alphabetize(numbers,true) 
=begin 
input: numbers,true 
output: 10,9,2,1,1 
expected output: 10,9,2,1,1 
=end 

このコード生成期待結果:

def alphabetize(arr,rev=false) 
    if rev == true 
     arr.sort!.reverse! 
    else 
     arr.sort! 
    end 
end 

numbers = [1,9,2,1,10] 

答えて

2

あなたは必ずしもないalphabetizeメソッドの戻り値を、印刷します配列の値

ifがありません。最後の文はelseです。 Rubyでは、ifのelse文の返り値はifの条件が満たされていないときはnilです。

2番目のコードでは、ifelseというステートメントがあります。したがって、if条件が失敗した場合のメソッドの戻り値は、elseブロック内で実行されるものになります。この場合、arr.sort!です。

それはalphabetize方法を言及する価値は、(sort!reverse!方法で!によって示される)に渡されるnumbers配列を変更します。 numbersを印刷した場合は、戻り値の代わりにalphabhetizeを使用すると、期待される出力も得られます。 falseの場合、それはnilを返す終わり

+0

最後のテストケースはどのように機能しましたか? – brooklynsweb

+0

@brooklynsweb私はさらに明確化を加えました。それが意味をなさないかどうか私に教えてください。 – phss

+0

その説明は理にかなっていますが、私は別の例を書いて、当初期待したとおりに動作します。違いはなんですか?コメントフィールドにコードの書式設定オプションがないことは残念です。ペーストビンです:http://pastebin.com/NGYYpqjB。更新:言い換えれば、2番目のテストケースは 'nil'を返しませんでした。なぜなら、 'if'が失敗した場合に定義されたアクションがなかったからです。 – brooklynsweb

0

def alphabetize(arr,rev=false) 
 
    arr.sort! 
 
    if rev == true 
 
     arr.reverse! 
 
    end 
 
    arr 
 
end
配列を返します。それがメソッドの終わりに配列値を返すことを確認する。 ruby​​fiddle.comでテスト済み http://rubyfiddle.com/riddles/c36bc/1

関連する問題