Шаблонные литералы с вложенными кавычками (`) в ES6

Итак, я сделал еще несколько экспериментов, и вот что я нашел. Кажется, он основан на том, является ли каждая переменная массивом. Учитывая этот вход:

void f5() {
        int w;
        int x[1];
        int *ret;
        int y;
        int z[1];
}

В итоге я получаю это в gdb:

(gdb) p &w
$1 = (int *) 0xbffff4c4
(gdb) p &x
$2 = (int (*)[1]) 0xbffff4c0
(gdb) p &ret 
$3 = (int **) 0xbffff4c8
(gdb) p &y
$4 = (int *) 0xbffff4cc
(gdb) p &z
$5 = (int (*)[1]) 0xbffff4bc

В этом случае int s и указатели обрабатываются сначала, последним объявленным в верхнюю часть стека и сначала объявили ближе к основанию. Затем массивы обрабатываются в противоположном направлении, чем раньше декларация, самая высокая в стеке. Я уверен, что для этого есть веская причина. Интересно, что это.

23
задан Nik Kyriakides 20 February 2019 в 10:41
поделиться

1 ответ

Заменять все специальные символы для использования в качестве строкового литерала динамично:

str = '`Hello`\\n${world}';
esc = str.replace(/\\|`|\$/g, '\\[110]amp;');
console.log(eval('`' + esc + '`') === str);

мне было нужно это для некоторого материала генерации кода. Эти str было содержание файла JS, и цель состояла в том, чтобы поместить это содержание в переменную строкового литерала в другого, генерировал файл JS.

Печально кажется, что существует (2019) никакая собственная функция JS для этого выхода. Символы, который должен быть заменен, (насколько я знаю): \, $ и \.

0
ответ дан 27 November 2019 в 22:19
поделиться
Другие вопросы по тегам:

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