除了 Lua 之外,还有哪些语言支持无限多种字符串分隔符?
What languages other than Lua support an infinite variety of string delimiters?
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 支持我在任何其他语言中都没有见过的东西:所谓的 'long brackets',有时也称为 'long strings' 或 'double brackets'。有无数种有效的长括号对:[[my multiline string]]
、[=[...]=]
、[==[...]==]
等等。您可以将它们用于多行注释,例如:--[[...]]
、--[=[...]=]
等。这意味着可以创建任何字符串文字,或者可以注释任何代码,而无需转义内容:您只需选择一个带有多个等号的长括号,这样结束定界符就不会出现在字符串中。
是否有任何其他语言具有可无限扩展的字符串定界符?我知道 Perl 的 q 样式,但 AFAIK 仅限于单个字符:q#...#
,qx...x
,等等。我对像 Lua 那样超越单字符定界符的解决方案特别感兴趣。
(出于好奇:当我尝试使用 ssh 'multiple; commands'
ssh 多个命令时出现了这个问题,其中一个命令是对 sudo sh -c '...'
的调用。我认为 shell是我经常手动创建具有多个引用级别的字符串文字的唯一环境。)
想要了解Lua的长括号的朋友:
- Lua 5.3 Reference Manual(搜索'long bracket')
- 示例位于 Lua wiki strings tutorial(搜索 'nesting quotes')
- Well House Consulting 处的示例(还包含多行注释示例)
一个有效的 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'
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;
但是,我不知道还有其他人。
UNIX shell(及其衍生版本)、Perl、PHP 和 Ruby(至少)支持 HEREDOCs,其中任何内容都可以用作定界标签.
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 支持我在任何其他语言中都没有见过的东西:所谓的 'long brackets',有时也称为 'long strings' 或 'double brackets'。有无数种有效的长括号对:[[my multiline string]]
、[=[...]=]
、[==[...]==]
等等。您可以将它们用于多行注释,例如:--[[...]]
、--[=[...]=]
等。这意味着可以创建任何字符串文字,或者可以注释任何代码,而无需转义内容:您只需选择一个带有多个等号的长括号,这样结束定界符就不会出现在字符串中。
是否有任何其他语言具有可无限扩展的字符串定界符?我知道 Perl 的 q 样式,但 AFAIK 仅限于单个字符:q#...#
,qx...x
,等等。我对像 Lua 那样超越单字符定界符的解决方案特别感兴趣。
(出于好奇:当我尝试使用 ssh 'multiple; commands'
ssh 多个命令时出现了这个问题,其中一个命令是对 sudo sh -c '...'
的调用。我认为 shell是我经常手动创建具有多个引用级别的字符串文字的唯一环境。)
想要了解Lua的长括号的朋友:
- Lua 5.3 Reference Manual(搜索'long bracket')
- 示例位于 Lua wiki strings tutorial(搜索 'nesting quotes')
- Well House Consulting 处的示例(还包含多行注释示例)
一个有效的 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'
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;
但是,我不知道还有其他人。
UNIX shell(及其衍生版本)、Perl、PHP 和 Ruby(至少)支持 HEREDOCs,其中任何内容都可以用作定界标签.