2015-10-09 8 views
5

これは簡単に修正できます。単にreturn nilにしてください。なぜ私のコードはその行なしで動作しないのですか?それがさらに混乱になり何なぜ私のコードは一度だけnilを出力しますか?

function x(bool) 
    if bool then 
     return "!" 
    end 
end 

print(x(true), x(false), x(false)) 

、私はなぜこれが起こっているのまわりで私の先を包むように見えることはできません1.

x(false)減算を呼び出すといつものように何回も、nilを印刷していることです。

+2

関数呼び出しBEFORE COMMAによって返される値の数が1に調整されます。最後の呼び出しの値の数は調整されません。だから、あなたは '1 + 1 + 0'という値を表示しています。 –

答えて

6

The manualは言う:

コントロールがreturnの文に遭遇することなく、関数の終わりに到達した場合、関数は結果なしで返します。

nilと結果が一致しないことに注意してください。この呼び出しで


print(x(true), x(false), x(false)) 

両方x(false)何も返さない、しかし、最後の要素を除くすべてのは常に1つの結果に調整されています。

通常、1つ以上の結果を返す関数呼び出しが最初に残っています。ここにの結果がありませんnilで満たされています。

+0

なぜそれは単に"! "それでは?なぜ2 nilsではないのですか? – warspyking

+0

@warspyking、@ YuHaoによると、最後の関数は 'nil'を返さないので、' nil'を表示しません(代わりに何も返しません)。 2番目から最後の関数の結果は、何も返さなくても(最後の関数と同じですが)正しい結果を保持するために結果が* n *に調整されるため、 'nil'として表示されます。これを 'x(true)、x(false)、1'に変更します。あなたは結果を ''! '、nil、1'で、 ''!'、1'、ではないでしょうか? –

+0

@ Paulそれは正しいと思いますが、「正しい数の結果を保持したい」場合、なぜ最後のものが調整されませんか? – warspyking

関連する問題