2016-04-08 12 views
3

nil.to_sが空の文字列'':"".to_sも空文字列であるとすれば、なぜnil.to_symがエラーを起こすのだろうと思います。私には論理的に思われるが、nil.to_symは空の記号:""を与えるだろう。何か不足しているのですか?またはこれがNilClassの便利なドロップイン拡張機能ですか?なぜRubyではシンボルがnilに変換されないのですか?

+2

間違いなく、Matz氏は質問します。ユースケースとは何ですか? – sawa

+0

sawa f.e.どこかに何もない可能性があるsomething.to_sym上のケース切り替え。ここにそれが無ければ私は本当に気にしない。 –

+1

'nil.to_s.to_sym'と一緒に行く –

答えて

1

最近まで、文字列とは違って、シンボルはガベージコレクションできなかったので、人はランダムオブジェクトからシンボルを生成することに注意する必要がありました。シンボルは、その在庫が事前に決定されたときに使用されます。開いた範囲のオブジェクトを表現するために使用されることは想定されていません。

最近、シンボルのガベージコレクションが導入されましたが、まだnil.to_symは必要ありません。シンボルクラスのインスタンスメソッドを安全に適用するだけの目的であれば、セーフティナビゲーション演算子を使用するだけでシンボルに変換する必要はありません。

foo&.some_symbol_method 
+0

'&.'演算子は基本的にRails 'try'メソッドの構文砂糖ですか? –

+4

これは同一ではありません。 'false'ではなく' nil'だけで動作します。 'false.try(:upcase)'はnilを返しますが、 'false&.upcase'は未定義のメソッドを生成します。また、 'try!'とは違って、 'try!'と違って、オブジェクトがnilではないがそのようなメソッドを持たないなら、nilを返します... '' hello ".try(:odd?)' 'nil、' 'Hello '& ? ''未定義のメソッドを呼び出す – SteveTurczyn

+0

'&.'は' try'とは違って連鎖できません。ありがとうございました、それは役に立ちました –

関連する問題