Почему кто-то решил бы превентивно использовать оператор вложенности для своих многострочных кавычек? - PullRequest
0 голосов
/ 02 мая 2019

Я смотрел какую-то документацию здесь:

http://lua.sqlite.org/index.cgi/doc/tip/doc/lsqlite3.wiki#db_exec

И нашел этот фрагмент кода:

    sql=[=[
      CREATE TABLE numbers(num1,num2,str);
      INSERT INTO numbers VALUES(1,11,"ABC");
      INSERT INTO numbers VALUES(2,22,"DEF");
      INSERT INTO numbers VALUES(3,33,"UVW");
      INSERT INTO numbers VALUES(4,44,"XYZ");
      SELECT * FROM numbers;
    ]=]
    function showrow(udata,cols,values,names)
      assert(udata=='test_udata')
      print('exec:')
      for i=1,cols do print('',names[i],values[i]) end
      return 0
    end
    db:exec(sql,showrow,'test_udata')

Здесь они используют многострочную строку, но добавляют оператор вложения =, даже если вложение не выполняется.

Зачем кому-то это делать?

1 Ответ

2 голосов
/ 02 мая 2019

Знак = не является оператором вложенности.Это просто символ, используемый для того, чтобы сделать маркер в двойных скобках уникальным.Неважно, происходит ли вложение или нет, все, что имеет значение, это то, что закрывающие двойные скобки имеют одинаковое количество = знаков и что строковый литерал не содержит этот маркер окончания.

Itвозможно иметь ]] в строке запроса sql, но не ]=].Поэтому использование ]=] - это всего лишь предосторожность, часть стиля кодирования, которая устраняет необходимость выбора точного маркера в двойных скобках для соответствия запросу sql.

...