Мне было интересно, какая разница между print x
и print "#{x}"
, в Ruby was. Действительно ли имеет значение то, что мы используем?Рубин: Разница между этими двумя?
ответ
print "#{foo}"
- здесь вы делаете объект строки interpolation.Whatever будет ссылаться на foo
(если это локальная переменная), возвращается из foo
(если это метод), по этому результату String#to_s
будут применены.
print foo
выведет объект будет ссылаться foo
(если это локальная переменная), возвращается из foo
(если это метод), на этом результате #to_s
будет применяться.
Выражение print "#{foo}"
примерно переводит на print foo.to_s
.
Kernel#print
- это тонкая обертка вокруг IO#print
, которая ультимативно называет IO#write
. Из write
«s документации:
[...] Если аргумент не является строкой, то он будет преобразован в строку с помощью
to_s
. [...]
Так что, в конце концов, нет никакой разницы. print "#{foo}"
, однако, сначала создаст строковое представление foo
и, во-вторых, интерполирует результат, который приведет к пустой строке, но я думаю, что это могло бы (было) легко оптимизироваться интерпретатором.
Еще одна вещь, о которой нужно помнить, если вы вернетесь и сделаете что-то большее для вывода, маршрут интерполяции строк может быть более привлекательным. print "this: # {foo}" немного легче читать, чем напечатать "this" + foo.to_s –
Нет никакой разницы, они оба применяют to_s
неявно в какой-то момент. Вы должны использовать print x
, а не print "#{x}"
. Зачем вам интересно, что использовать? print "#{x}"
, очевидно, менее прост, чем print x
.
print name
обычно используется, если вам нужно только распечатать эту вещь и ничего более.
Строковая интерполяция используется, когда вы хотите вставить значения в другие строки.
print "My name is #{my_name} and I am currently #{my_age} years old."
Можно даже вставить некоторую логику:
print "My name is #{my_name.capitalize} and"
print "I am currently #{my_age} year#{my_age>1 ? 's':''} old." #print years instead of year if age is greater than 1.
- 1. Разница между этими двумя?
- 2. Разница между этими двумя
- 3. Разница между этими двумя функциями?
- 4. Разница между этими двумя строками?
- 5. Разница между этими двумя селекторами?
- 6. Разница между этими двумя отливками
- 7. Разница между этими двумя линиями?
- 8. разница между этими двумя линиями
- 9. Разница между этими двумя attr_reader?
- 10. Разница между этими двумя синтаксисами
- 11. Разница между этими двумя CSS
- 12. Разница между этими двумя функциями
- 13. Разница между этими двумя кодами?
- 14. Какая разница между этими двумя?
- 15. Разница между этими двумя кодами?
- 16. Какая разница между этими двумя?
- 17. Разница между этими двумя формулами
- 18. разница между этими двумя линиями
- 19. Разница между этими двумя NSArrays
- 20. Разница между этими двумя программами
- 21. Разница между этими двумя примерами?
- 22. разница между этими двумя вещами
- 23. Разница между этими двумя утверждениями? - C++
- 24. Любая разница между этими двумя импортными?
- 25. В чем разница между этими двумя JSFiddle?
- 26. В чем разница между этими двумя запросами
- 27. В чем разница между этими двумя реализациями?
- 28. Есть ли разница между этими двумя утверждениями?
- 29. Какая разница между этими двумя видами? (Авторотация)
- 30. В чем разница между этими двумя командами?
ли вы понять, что '# {}' синтаксис делает в общем случае? – mikej