有没有办法在Elixir的函数中注释掉代码行

时间:2015-07-29 04:24:18

标签: elixir

有没有办法在函数中注释掉一行或多行代码?

类似于以下内容

defmodule MyModule
  def foo do
    //a = "old code"
    a = "new code"
  end
end

defmodule MyModule
  def foo do
    /*a = "old code"
    b = 1234 */
    a = "new code"
  end
end

2 个答案:

答案 0 :(得分:21)

Elixir中的注释,在可用作脚本语言的语言中很常见,使用井号。

defmodule MyModule
  def foo do
    # a = "old code"
    a = "new code"
  end
end

从形式上讲,没有办法进行多行评论,但多行字符串最终会成为一个noop。

defmodule MyModule
  def foo do
    """
    a = "old code"
    a = "more old code"
    """
    a = "new code"
  end
end

答案 1 :(得分:2)

我远非专家,但我不认为这个答案适用于所有情况。如果多行字符串位于函数的末尾,则它将作为函数的结果返回。所以我认为以下对答案代码的重新排序失败了(或者至少没有按预期运行)。它返回"a = \"old code\"\na = \"more old code\"\n"。另请注意,do行的答案中缺少defmodule。最后,使用"""进行多次评论的代码会产生unused literal错误(而'''则不会)。

defmodule MyModule do
  def foo do
    a = "new code"
    """
    a = "old code"
    a = "more old code"
    """
  end
end

因此,如果多行注释技术不起作用(在所有情况下),我们应该如何阻止一段代码?

您无法在函数内设置属性(例如@comment """...),因此无效。

您可以像this question中那样使用宏,但会稍微“污染”代码。

我用Google搜索了一下,但找不到合适的答案(也许我错过了一些明显的答案)所以我只需要修改一些elisp代码来阻止Emacs中的一个部分与#对齐(如果它还没有在Elixir模式包中)。