my_lua_string = [=[ This is a string delimited with long brackets; it contains other valid long brackets like [[this]] (or this: ]==]), but they are ignored because Lua looks for a long bracket that matches the opening delimiter. ]=]
Lua支持我没有用任何其他语言看到的东西:所谓的“长括号”,有时也被称为“长串”或“双括号”。有效的长括号对有多种:[[my multiline string]]
,[=[...]=]
,[==[...]==]
等等。您可以将它们用于多行注释,如:--[[...]]
,--[=[...]=]
等。这意味着可以创建任何字符串文字,或者可以注释任何代码,而无需转义内容:您只需选择一个带有多个等号的长括号,使得结束分隔符不会出现在字符串内。
是否有其他语言具有无限可扩展的字符串分隔符?我知道Perl的q样式,但AFAIK仅限于单个字符:q#...#
,qx...x
,等等我对像Lua这样的解决方案特别感兴趣,超越了单字符分隔符。
(好奇:当我尝试使用ssh 'multiple; commands'
ssh多个命令时,这个问题冒出来了,其中一个命令是对sudo sh -c '...'
的调用。我认为shell是我唯一的环境经常手动创建具有多个引用级别的字符串文字。)
对于那些想要了解更多关于Lua长括号的人:
有效的Lua注释和有效的Lua字符串:
--[[ This comments out an assignment to my_lua_string
my_lua_string = [==[one [=[inner]=] two]==]
]]
-- This is a string delimited with long brackets
[=[one ]] two]=]
--> 'one ]] two'
答案 0 :(得分:1)
PostgreSQL允许这样:https://www.postgresql.org/docs/8.0/static/sql-syntax.html#SQL-SYNTAX-DOLLAR-QUOTING
它最常用于定义存储过程,如下所示(参见$$
):
CREATE OR REPLACE FUNCTION increment(i integer) RETURNS integer AS $myAddOne$
BEGIN
RETURN i + 1;
END;
$myAddOne$ LANGUAGE plpgsql;
但是,我不知道其他任何人。
答案 1 :(得分:1)
UNIX shell(及其衍生物),Perl,PHP和Ruby(至少)支持HEREDOCs,其中任何东西都可以用作分隔标记。