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

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

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')

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

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


person Zhro    schedule 02.05.2019    source источник


Ответы (1)


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

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

person Vlad    schedule 02.05.2019