Что означает `+ ''` `в Ruby? - PullRequest
       0

Что означает `+ ''` `в Ruby?

4 голосов
/ 14 февраля 2020

У меня есть эта строка кода в проекте, который я смотрю - cta = send(state + '_cta') || +''

Что делает +''?

1 Ответ

11 голосов
/ 14 февраля 2020

+'' - это унарный оператор +, применяемый к строковому литералу '' и унарный + для строк :

+ str → str (изменяемый)
Если строка заморожена, вернуть возвращаемую дублирующую изменяемую строку.

Если строка не заморожена, вернуть саму строку.

В файлы Ruby обычно помещают # frozen_string_literal: true, чтобы все строковые литералы (такие как '') были заморожены (то есть неизменными). Так что '' часто является неизменной строкой, но +'' является изменяемой версией ''.

Это означает, что это:

cta = send(state + '_cta') || +''

должно оставить изменяемую строку в cta.


Кроме того, если send(state + '_cta') даст вам String или nil, то вы также можете сказать:

cta = send(state + '_cta').to_s

, начиная с NilClass#to_s дает вам незамороженный ''. Если send(state + '_cta') может вернуть false, то версии +'' и to_s, конечно, отличаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...