Julia 中的块评论:#= 与 """

5Pa*_*ack 7 julia

我知道 Julia 中的块评论是正式的#= ... =#。我还知道多行字符串是""" ... """.

然而,我看到很多源代码""" ... """在文件顶部使用来编写文档,而 Julia 似乎将其解释为注释(例如:Flux.jl)。

我的问题是:如果我使用""" ... """任何类型的冗长多行注释(例如描述函数参数),使用 会不会有任何类型的缺点#= ... =#?我想知道任何性能损失、解析过程中潜在的副作用等...除了个人喜好之外,为什么要使用#=over ?"""

Prz*_*fel 6

"""函数前面是文档字符串,稍后 Julia 的帮助系统会看到这些文档字符串(例如,当您键入时?funnctionname或可用于自动生成文档,该文档通常通过 Travis 等工具集成到 CI 流程中)。

要了解发生了什么,请尝试这个简单的 Julia 会话:

julia> """
           myfoo(bar::AbstractVector)
       Returns the length of `bar`
       """
       myfoo(bar::AbstractVector) = length(bar)
myfoo

help?> myfoo
search: myfoo

  myfoo(bar::AbstractVector)

  Returns the length of bar

julia>
Run Code Online (Sandbox Code Playgroud)


Osk*_*ar 5

Julia 确实将三引号读取为字符串,而不是注释。字符串基础知识

Julia 还允许您为某些函数编写文档,您可以在该函数之上编写该文档。这可以是简单的或三重引用的。通常使用三引号,因为它们对于较长的文本块更有用。文档

Julia 使包开发人员和用户能够通过内置文档系统轻松记录函数、类型和其他对象。基本语法很简单:出现在顶层对象(函数、宏、类型或实例)之前的任何字符串都将被解释为对其进行记录(这些称为文档字符串)。请注意,文档字符串和记录对象之间不得插入空行或注释。

您要求进行绩效处罚。您可以尝试以下方法:

julia> using BenchmarkTools

julia> @btime """Hello
       Hello
       Hello"""
  1.694 ns (0 allocations: 0 bytes)
"Hello\nHello\nHello"

julia> @btime #=Hello
       Hello
       Hello=#1
  0.020 ns (0 allocations: 0 bytes)
Run Code Online (Sandbox Code Playgroud)

(我需要在注释后添加任何内容,因为否则语法将不正确)

所以你看,解析 aString需要 1.6ns,而注释根本不需要任何时间。但是,文档字符串仅在加载包时解析一次,在执行某些函数时,它们不计算在内。所以除非你有这样的脚本

for i in 1:10^10
   include("file_with_docstring.jl")
end
Run Code Online (Sandbox Code Playgroud)

文档字符串的解析时间不会对代码产生任何影响。因此,最好的方法是按照标准做法,并使用#or#= [...] =#和文档字符串使用简单或三引号" [...] ",来编写注释""" [...] """