Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 多行协议方法docstrings应该如何格式化?_Clojure_Format_Docstring - Fatal编程技术网

Clojure 多行协议方法docstrings应该如何格式化?

Clojure 多行协议方法docstrings应该如何格式化?,clojure,format,docstring,Clojure,Format,Docstring,多行函数或协议文档字符串可以轻松格式化: (defn foo "Does a very complicated thing that I need to explain in excruciating detail. Firstly, this function stringifies x with the standard greeting of 'Hello'. Secondly, it appends the necessary exclamation point to the

多行函数或协议文档字符串可以轻松格式化:

(defn foo
  "Does a very complicated thing that I need to explain in excruciating detail.
  Firstly, this function stringifies x with the standard greeting of 'Hello'.
  Secondly, it appends the necessary exclamation point to the resulting string.
  Finally, it prints the resulting result to *out*, followed by a newline and
  the appropriate flush."
  [x]
  (println (str "Hello, " x "!")))

(defprotocol Bar
  "A retail business establishment that serves alcoholic beverages, such as
  beer, wine, liquor, cocktails, and other beverages like mineral water and soft
  drinks and often sells snack foods, like crisps or peanuts, for consumption on
  premises.")
但这两种方法不可避免的结合又如何呢:协议方法?它们是否应该用两个空格缩进溢出到下一行

(defprotocol Baz
  (qux [thing2 thing1] "Lorem ipsum dolor sit amet, consectetur adipiscing elit,
  sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad
  minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
  commodo consequat."))
这在代码中看起来不错,但如果我调用
(doc qux)
,我会

-------------------------
用户/用户
([thing2 thing1])
Lorem ipsum dolor sit amet,献祭精英,
这是临时性的劳动和就业机会。乌特埃尼姆酒店
最低成本、最低成本、最低成本和最低成本
康多康塞卡特。
现在第一行看起来很奇怪。这是唯一一个不会让Emacs的M-q对你不利的选项,所以这样的事情不会发生:

(defprotocol Baz
  (qux [thing2 thing1]
  "Lorem ipsum dolor sit amet, consectetur adipiscing elit,sed do eiusmod tempor
  incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
  nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
  consequat."))
即使这没有破坏自动格式化,对我来说也有点奇怪

那么我应该放弃吗?我是否应该在协议方法中只使用非常短的docstring,或者在协议的主docstring中包含更全面的文档

(defprotocol Baz
  "Lorem ipsum dolor sit amet, consectetur adipiscing elit,sed do eiusmod tempor
  incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
  nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
  consequat."
  (qux [thing2 thing1] "Does a thing to thing1 depending on thing2."))

或者有更好的方法吗?

我也觉得这样做很尴尬,但最终还是使用了中间的方法(注释本身从参数列表后的下一行开始),并且没有发现它看起来很奇怪。它肯定能从
(doc…
)生成最漂亮的输出

我最初写道,这种方法与M-q之间没有冲突,但我只是做了更多的实验,认为我发现了您提出的问题。如果我在doc字符串中点击M-q,这是我经常做的事情,它工作得很好。但是如果我在
defprotocol
表单中的doc字符串之外执行,是的,它会将第一行推得太远。那么,在回流之前移动到字符串内部对您有效吗


老实说,我经常把我的API文档看作是这些天制作的一个网站。所以我将其格式化为降价,对其格式和纯文本可读性的关注稍微少一些。

有趣的问题。如果你在这里没有得到答案,你可能想在Clojure Google group上开始一个简短的讨论。@Mars好主意,谢谢。最后,我确实就这个话题开始了一场辩论。:)在仔细考虑了这个问题之后,中间的选择似乎是唯一有意义的选择。也许这只是与之有关,但无论我怎么尝试,我都无法在Emacs中获得方法docstring的缩进。