x = "hello" " world".to_sym
puts x.class
これは機能し、2つの文字列をシンボルに連結して、次の出力を生成できます。
Symbol
しかし、helloとworldの文字列を区切るスペースの代わりに+を使用するように少し変更すると、エラーが発生します。
x = "hello" + " world".to_sym
puts x.class
これにより、次のエラーが発生します。これは、「hello」文字列に連結する前に、「world」.to_symコールバックを文字列に「キャスト」しようとしているためだと思います。
in `+': can't convert Symbol into String (TypeError)
何が最初の例を機能させるのか疑問に思いますか?ここでの操作の順序を知っている人はいますか?2つの文字列は実際には1つとして扱われ、それらの間のスペースは無視され、to_symメソッドが呼び出される前に連結されていると思われます。「hello」と「world」のコンテンツを結合しようとする前に、to_symが「world」文字列で呼び出されると思ったので、実際には2番目の例と同じように機能することを期待していました。