Замените все {{и}} без замены {{special_str}} на python [duplicate]

Возможно ... но мне жаль, что у меня не было более элегантного решения.

Трюк НЕ заимствовать у anchor и, следовательно, жонглировать между двумя аккумуляторами:

  • , в котором выполняется ссылка на текущий узел
  • , другому назначается ссылка на следующий узел

Это приводит меня к:

impl Recursive {
    fn back(&mut self) -> &mut Link {
        let mut anchor = &mut self.root;

        loop {
            let tmp = anchor;
            if let Some(ref mut node) = *tmp {
                anchor = &mut node.next;
            } else {
                anchor = tmp;
                break;
            }
        }

        anchor
    }
}

Не совсем красиво, но это что-то, что может проверить заемщик ¯ \ _ (ツ) _ / ¯.

@ker улучшил это, создав неназванное временное:

impl Recursive {
    fn back(&mut self) -> &mut Link {
        let mut anchor = &mut self.root;

        loop {
            match {anchor} {
                &mut Some(ref mut node) => anchor = &mut node.next,
                other => return other,
            }
        }
    }
}

Фокус здесь в том, что использование {anchor} перемещает содержимое anchor в неназванное временное, на котором выполняется совпадение. Поэтому в блоке match мы не заимствуем из anchor, а из временного, оставляя нас свободными изменять anchor. См. Связанный пост в блоге Материал, который выполняет функция идентификации (в русте) .

38
задан aitchnyu 18 August 2014 в 10:19
поделиться

1 ответ

Вы можете отключить интерпретацию тегов внутри блока {% raw %}:

{% raw %}

Anything in this block is treated as raw text,
including {{ curly braces }} and
{% other block-like syntax %}

{% endraw %}

См. раздел Escaping документации по шаблону.

90
ответ дан Martijn Pieters 28 August 2018 в 11:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: