Есть ли способ прокомментировать строки кода в функции в 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

Ответ 1

Комментарии в 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

Ответ 2

Я далек от эксперта, но я не думаю, что этот ответ работает во всех случаях. Если многострочная строка находится в конце функции, она будет возвращена как результат функции. Поэтому я думаю, что следующее переупорядочение кода ответа не сработает (или, по крайней мере, не работает так, как ожидалось). Он возвращает "a = \"old code\"\na = \"more old code\"\n". Также обратите внимание, что в ответе на строке defmodule отсутствует do. Наконец, код с использованием """ для нескольких комментариев будет генерировать ошибку unused literal (тогда как ''' не будет).

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

Итак, если метод многострочных комментариев не работает (во всех случаях), как мы должны блокировать раздел кода?

Вы не можете установить атрибут (например, @comment """... внутри функции), чтобы он не работал.

Вы можете использовать макросы, как в этот вопрос, но немного "загрязняет" код.

Я немного искал и не могу найти подходящий ответ (возможно, мне не хватает чего-то очевидного), поэтому я просто взломаю некоторый код elisp, чтобы заблокировать раздел в Emacs, добавив каждую строку с помощью # (если он еще не находится в пакете режима Elixir).