2016-11-27 58 views
1
nil.to_i => 0 
nil.to_a => [] 
nil.to_h => {} 
nil.to_s => '' 
nil.to_sym => undefined method `to_sym' for nil:NilClass 

これが実装されていない具体的な理由はありますか?私はこの動作が期待されるでしょう:Ruby:nil.to_symは例外を発生させます、なぜですか?

nil.to_sym => :'' 

これは残りと一貫しています。 ruby-lang.orgで機能リクエストを行うべきですか?

+2

(これは正当な質問ですが、私は誰も侮辱していません) – Mat

+1

Matzだけがこの質問に答えることができるので、おそらく票が下がっています。様々な決定のための正当な理由がある注釈付きの仕様はもちろんのこと、Rubyの仕様はありません。 「NilClass#to_h」さえかなり最近の追加です。 –

答えて

2

私はRubyでnil.to_sym =>: ''を実装するのが意味的に間違っていると思います。

"to_sym"メソッドは文字列に対応するSymbolを返し、以前に存在しなかったシンボルを作成します。 nilがStringのインスタンスではなく、インスタンスNilClassであることを考慮すると、それはその作成者によって設定された仕様を満たす。

私はこれがあなたの質問に答えることを願っています。

+0

まだ、それはまだ間違っていると感じています。仕様がそれをしてはならないと言っているという事実は、そうであってはならないという意味ではありません。おそらく仕様を変更する必要があります。 (少なくとも私は私のルビービルドのためにこの動作を変更するつもりだと知っています)。 – Mat

+0

これは可能ですが、これらのメソッドはインスタンス固有であり、to_symの実装はStringインスタンスのみに非常に限定されていることに注意してください。ですから、慎重で幸運を覚悟してください – Sayan

+0

Btw、String#to_iのドキュメントは次のように書いています: 'strの先頭の文字を整数ベースとして解釈した結果を返します(2と36の間)。有効な数字の最後を過ぎた余分な文字は無視されます。 strの先頭に有効な数値がない場合は、0が返されます。このメソッドは、ベースが有効なときに例外を発生させることはありません。この特殊な動作は、strの先頭に有効な数字がないときに 'to_sym'にも適用できます。 – Mat

関連する問題