nil.to_s
が空の文字列''
と:"".to_s
も空文字列であるとすれば、なぜnil.to_sym
がエラーを起こすのだろうと思います。私には論理的に思われるが、nil.to_sym
は空の記号:""
を与えるだろう。何か不足しているのですか?またはこれがNilClass
の便利なドロップイン拡張機能ですか?なぜRubyではシンボルがnilに変換されないのですか?
答えて
最近まで、文字列とは違って、シンボルはガベージコレクションできなかったので、人はランダムオブジェクトからシンボルを生成することに注意する必要がありました。シンボルは、その在庫が事前に決定されたときに使用されます。開いた範囲のオブジェクトを表現するために使用されることは想定されていません。
最近、シンボルのガベージコレクションが導入されましたが、まだnil.to_sym
は必要ありません。シンボルクラスのインスタンスメソッドを安全に適用するだけの目的であれば、セーフティナビゲーション演算子を使用するだけでシンボルに変換する必要はありません。
foo&.some_symbol_method
'&.'演算子は基本的にRails 'try'メソッドの構文砂糖ですか? –
これは同一ではありません。 'false'ではなく' nil'だけで動作します。 'false.try(:upcase)'はnilを返しますが、 'false&.upcase'は未定義のメソッドを生成します。また、 'try!'とは違って、 'try!'と違って、オブジェクトがnilではないがそのようなメソッドを持たないなら、nilを返します... '' hello ".try(:odd?)' 'nil、' 'Hello '& ? ''未定義のメソッドを呼び出す – SteveTurczyn
'&.'は' try'とは違って連鎖できません。ありがとうございました、それは役に立ちました –
- 1. なぜ私の変数がNilですか? - Ruby on Rails
- 2. GLSL変換がレンダリングされないのはなぜですか?
- 3. Rubyでは、なぜ!nil return => true?
- 4. ruby2.0でtrueとnilのobject_idが変更されたのはなぜですか?
- 5. &が& ampに変換されるのはなぜですか?
- 6. JSPがサーブレットに変換されるのはなぜですか?
- 7. なぜRubyでは `a = a`` nil`ですか?
- 8. golangの(nil)マップの印刷で「<nil>」の結果が表示されないのはなぜですか?
- 9. 可変長配列が変換されないのはなぜですか?
- 10. JSPがHTMLに変換されないのはなぜですか?
- 11. 宣言の直後に変数nilがないのはなぜですか?
- 12. JavaでTimeUnit.convert()が正しく変換されないのはなぜですか?
- 13. Imagemagick変換でループパラメータが考慮されないのはなぜですか?
- 14. nilをString-rubyに暗黙的に変換しない
- 15. なぜRuby Arrayのスライスでnilが返され、空の配列が返されるのでしょうか?
- 16. 値がオプションのハッシュで `nil`メソッドに渡されるのはなぜですか? (Ruby)
- 17. fetchedResultsControllerがnilに設定されているのはなぜですか?
- 18. €などのHtmlエンティティは、CSV変換でシンボルに変換されません。
- 19. なぜself.myInstance = nilではなくmyInstance = nilですか?
- 20. なぜ自分の変数がnilに設定されていますか?
- 21. pd.to_datetimeが変換できないのはなぜですか?
- 22. なぜself.navigationItem.backBarButtonItemは常にnilですか?
- 23. なぜviewcontrollerで渡された値がnilであるか
- 24. なぜこの文字列がIntegerに変換されるとNilとして出力されますか?
- 25. これはなぜ正しく変換されないのですか?
- 26. 私のffmpegが.avi形式に変換された後に再生されないのはなぜですか?
- 27. パフォーマンスカウンターが変更されないのはなぜですか?
- 28. リストが変更されないのはなぜですか?
- 29. バインドされた変数が変更されないのはなぜですか?
- 30. なぜis_atom(nil)がエリキシルでtrueに等しいのですか?
間違いなく、Matz氏は質問します。ユースケースとは何ですか? – sawa
sawa f.e.どこかに何もない可能性があるsomething.to_sym上のケース切り替え。ここにそれが無ければ私は本当に気にしない。 –
'nil.to_s.to_sym'と一緒に行く –