x = "hello" " world".to_sym
puts x.class
Это работает и позволяет мне объединить две строки в символ, создавая вывод:
Symbol
Но если я немного изменю его, чтобы использовать + вместо пробела, разделяющего строки приветствия и мира, я получу ошибку:
x = "hello" + " world".to_sym
puts x.class
Это приводит к следующей ошибке - я думаю, что это происходит потому, что он пытается «привести» вызов «world» .to_sym к строке перед объединением ее в строку «hello»:
in `+': can't convert Symbol into String (TypeError)
Мне интересно что заставляет работать первый пример ? Кто-нибудь знает, каков порядок операций здесь? Я подозреваю, что две строки фактически обрабатываются как одна, что пространство между ними игнорируется, и они объединяются перед вызовом метода to_sym. На самом деле я ожидал, что он будет работать не иначе, как во втором примере, потому что я думал, что to_sym будет вызываться для строки "world" ДО того, как будет предпринята любая попытка соединить содержимое "hello" и "world".