Я бы не поддержал это, так как я не думаю, что это действительно тот ответ, который вы ищете. Но я решил, что все равно буду делиться мыслями.
На самом деле, вероятно, труднее читать, но мне было бы интересно увидеть результаты теста или версию, используемую в вашем вопросе.
out = "#{content_tag(...) if foo}" <<
"hello, 1 < 2" <<
"#{content_tag(...) if bar}"
out.html_safe
Кроме того, я не знаком с внутренностями того, как html_safe
знать, есть ли разница в определении его как так первоначально против до возвращения. Я предполагаю, что начальная установка html_safe
будет быстрее, так как вы дублирующие строки нулевой длины вместо потенциально длинной строки, но ради аргумента:
out = '' # or ActiveSupport::SafeBuffer.new
out << content_tag(...) if foo
out << 'hello, 1 < 2' # will be escaped properly
out << content_tag(...) if bar
out.html_safe
Имея это в виду, я хотел бы рассмотреть изменяя мой исходный код из выше даже сделать шаг дальше:
"#{content_tag(...) if foo}".html_safe <<
"hello, 1 < 2" <<
"#{content_tag(...) if bar}"
Опять же, не очень читаемый, но думал, что я бросить его там в качестве пищи для размышлений.
Ваши первые два примера не будут выходить из '' '. У вас все еще есть 'html_safe' в вашем последнем, так что ничего не было получено ... –
Я в замешательстве ... все 3 из них имеют вызовы' html_safe'. Возможно, я неправильно понял ваш первоначальный вопрос. Что вы пытаетесь выполнить (или избегать)? –
'" ".html_safe +" <" # => "<" 'while' "<". Html_safe # => "<" ' –