+''
- это унарный оператор +
, применяемый к строковому литералу ''
и унарный +
для строк :
+ 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
, конечно, отличаются.