2013-03-09 20 views
7

私の経験は、関数の戻り値の型が無効、つまり返されないC言語(C、C++、Java、C#)の経験です。しかし、Rubyでは、すべての関数が何かを返すように見えます。私は、RubyでJavaやC++で何も返さないメソッドを返すのに不思議に思っていました。私の最高の推測は、nilか、メソッドを含むオブジェクト(連鎖のためのもの)か、最後に何が起こるか無視するだけですが、これに関する情報を見つけることはできません。Rubyのvoid戻り型への代替

Rubyで無効にする方法はありますか?

答えて

9

は、メソッドの最後の文に

return nil 

を入れてください。

それとも単に

nil 
+2

空の関数( 'def foo; end')も' nil'を暗黙的に返します。 –

+0

@Zoidbergそれは本当ですが実用的ですか? – texasbruce

+0

まあ、一貫性を保つために、 "void"を返す関数からも 'nil'を返します。 –

0

あなたは何も返さないことにしたい場合は、はい、あなたは戻りnilを使用することができます。しかし、なぜ?

関数呼び出しを変数に代入しないことによって、返されたものを幸いに忘れることができます。その戻り値はガベージコレクションではどこにも格納されず、失われます。

+11

メソッドの最後の式が評価されたことについて少なくとも考えないと、誤ってあなたの書類がそうでないと言っても、人々はそれを頼りにするかもしれません。 –

0

nilはvoidと同じではありません。変数をnilに設定できますが、voidに設定することはできません。関数がnilを返した場合は、エラーなしで変数に代入することができますが、void関数(javaやvoid関数をサポートする言語など)を使用してコンパイルしてみてください。私はルビーの熟練した専門家ではないが、私はvoidの概念がサポートされているという兆候は見当たらない。すべての関数は、たとえそれがゼロであっても何かを返す。これが間違っていれば、ルビーの知識が豊富な人が反例を提供できることを願っています。

特に、すべてがオブジェクトであるルビの変数は、ヒープ上のオブジェクトを指すアドレスを格納する名前と場所を持つものです。変数をnilに設定するということは、ポインタをNilClassの唯一のインスタンスに設定することを意味します。 (trueとfalseは似ています; TrueClassとFalseClassのインスタンスが1つあります)

私はCにvoidポインタと呼ばれるものがあることを認識しています。これは、「無効」という言葉の全く異なる使用です。 voidポインタは、実際にはアドレスを含み、何かを指しています。今はこれらを無視しましょう。私は、彼らが不毛なレトルトを避けるために言及しているだけです。私たちは、関数に焦点を当てています。ルビーでは、文字通りは返されません。、私が知る限りでは存在しません。

関連する問題