【问题标题】:Lua multiline comments past ]]'sLua 多行注释过去]] 的
【发布时间】:2014-05-08 11:23:39
【问题描述】:

我正在尝试找到一种在一批代码上使用多行注释的方法,但它总是将其中的一些语法误认为是 ]] 并认为我希望它在那里结束,但我没有!

--[[
  for k,v in pairs(t) do
    local d = fullToShort[k]
    local col = xColours[v[1]] -- It stops here!
    cecho(string.format(("<%s>%s ", col, d))
  end
--]]

我认为我在某处读到了可以使用不同类型的组合来避免这些错误的地方,例如 --[=[ 或诸如此类...有人可以帮忙吗?

【问题讨论】:

    标签: lua comments multiline


    【解决方案1】:

    正如您在Strings tutorial 中看到的,有一个特殊的[===[ 语法用于嵌套方括号。您也可以在块 cmets 中使用它。请注意,= 符号的数量在打开和关闭顺序上必须相同。

    例如 5 个等于将起作用。

    --[=====[ 
    for k,v in pairs(t) do
       local d = fullToShort[k]
       local col = xColours[v[1]] -- It stops here!
       cecho(string.format(("<%s>%s ", col, d))
    end
    --]=====]
    

    【讨论】:

    • 这几乎感觉像是一个杂物。我想知道他们为什么这样做?
    • @James 这不是拼凑——这是唯一的正确方法。每个其他固定的“魔术注释结束字符序列”(以下称为 MCCCS)从根本上无法处理包含 MCCCS 本身的字符串。这就是为什么每次你想在CDATA 中写]]&gt; 时都以atrocities like ]]]]&gt;&lt;![CDATA[&gt; 结尾的原因。避免这种情况的唯一方法是提供长度(或内容,如 bash HEREDOC)不同的成对分隔符。一个更好的问题应该是:为什么所有其他语言都不像 Lua 那样做?
    • 很酷,当在块注释内的[[]] 之间插入多行字符串时,它也可以工作。在这种情况下,您还可以将= 放在嵌入块中,以将其与包含块边界区分开来,例如使用[=[]=]
    • @AndreyTyukin OCaml 以一种优雅的方式解决了这个问题:cmets 必须包含有效的代码标记:(* "*)" *)(* … (* nested comment *) ... *) 一样有效。它允许您毫无问题地评论任何句语法有效的代码。
    【解决方案2】:

    您可以使用以下内容创建超过 ]] 的多行 cmets:

    --[[
       codes
    ]]
    

    【讨论】:

    • 答案反映了问题的标题。我对此很好。最好的办法是重写原来的问题标题。
    • 我在评论中没有看到任何]]
    猜你喜欢
    • 2011-02-02
    • 1970-01-01
    • 2010-10-13
    • 2012-02-11
    • 2011-02-14
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 2013-12-15
    相关资源
    最近更新 更多