Ruby中的多行注释?


745

如何在Ruby中注释多行?


7
万一有人在Puppet .pp清单中寻找多行注释(基于类似Ruby的语法),您可以使用c样式的块注释 /**/
msanford 2014年

6
不幸的是,ruby中的多行注释看起来非常像一段代码。考虑到对这个问题的高分(和公认的答案),从事红宝石语法研究的人们应该清楚地考虑一下。
尼克

Answers:


1353
#!/usr/bin/env ruby

=begin
Every body mentioned this way
to have multiline comments.

The =begin and =end must be at the beginning of the line or
it will be a syntax error.
=end

puts "Hello world!"

<<-DOC
Also, you could create a docstring.
which...
DOC

puts "Hello world!"

"..is kinda ugly and creates
a String instance, but I know one guy
with a Smalltalk background, who
does this."

puts "Hello world!"

##
# most
# people
# do
# this


__END__

But all forgot there is another option.
Only at the end of a file, of course.
  • 这就是它的外观(通过屏幕截图)-否则很难解释以上注释的外观。点击放大

文字编辑器中的评论


26
我真的更喜欢#全部使用它们,主要是因为它在视觉上比=begin/ =end或使用here-to方法更好地分隔了注释行。而且,很好。
Tin Man 2010年

38
有趣的是,这个答案使语法荧光笔中的一些缺陷显而易见。
ZoFreX 2012年

69
不要忘记这一点,=begin并且=end不能在其前面加上任何空格。
bergie3000

15
并且不可能在方法中使用= begin = end
AlbertCatalà2014年

7
重要的是要注意,在上面的示例代码中,生成文档时,rdoc仅选择=begin...=end使用的第一个和最后一个块#
Tin Man

126
=begin
My 
multiline
comment
here
=end

4
当然可以。有用。这是极为罕见的。我觉得很丑。也许我陷入困境了?
David J.

53
我发现,如果我在= begin或= end之前包含一个标签,则注释将不起作用。= begin和= end都需要写在每一行的开头。
罗斯·佩罗

1
你并不孤单@DavidJames。我个人选择由我的编辑将所有评论都删除。CMD + /或ALT + /是大多数情况下的惯例。
anon58192932 '16

1
@DavidJames,您会怎么做?#在每行之前输入a 和空格?击键很多,尤其是当我开始添加换行符时。
保罗·德雷珀

56

尽管存在=begin=end,但通常的更正确的注释方法是#在每行上使用。如果您阅读任何ruby库的源代码,您将发现这几乎是在所有情况下进行多行注释的方式。


4
您可能会得到有关语句“更正确”部分的论据,因为它们都是有效的。我更喜欢使用,#因为它更明显。在注释掉代码时,很重要的一点就是要弄清楚发生了什么。如果您在查看代码时没有在编辑器中使用代码着色的好处,则使用=begin/=end可能很难弄清为什么忽略代码。
锡人2010年

6
当然,有很多“有效”的方式来写评论。让我们在这里实用。如果您实际上是在编写Ruby并阅读了其他人所写的内容,则应该使用#注释。(我很奇怪,为什么会有两次失败。我想有时候Stack Overflow社区必须弄错了!)
David J.

4
3 == three在哪里def three; 1 + 1 + 1 end。因此,两者都是有效的。谁在乎?使用3
David J.

1
@theTinMan虽然如此,但根据我的经验,通常唯一一次缺少语法高亮的地方是在vi生产服务器上使用时。在这种情况下,无论如何,您可能不应该在那里进行开发。
Parthian Shot

1
@DavidJames您的示例很荒谬,因为它更冗长。对于较长的注释,在每行上都添加哈希值更为冗长。而且,如果有人认为“ / dev / urandom在这里用于非阻塞式加密声音的PRNG。请勿触摸此代码-这很神奇”是我编写ruby的尝试,我认为他们的困惑更多是由于对他们的无知引起的。部分原因是我的缺乏明确性。这并不是说您的观点总是无效的-在注释掉代码时只是一个好观点。但是,如果您的评论只是...评论...无论哪种方式都应该清楚。
Parthian Shot

20
#!/usr/bin/env ruby

=begin
Between =begin and =end, any number
of lines may be written. All of these
lines are ignored by the Ruby interpreter.
=end

puts "Hello world!"

1
+1是因为我不知道嵌套是Ruby多行注释中的一件事。
Parthian Shot

2
@ParthianShot-这不是问题-如果不在行首,则= begin和= end将被忽略。似乎无法嵌套。
skagedal,2015年

将注释嵌套在注释内将导致尝试在没有注释要结束时结束注释,从而导致单个注释或语法错误。/*I am a\n#nested\ncomment, which really serves no purpose*/ /*I am bound /*to*/ FAIL!*/如果您在多行注释中包含单行注释和代码,例如具有您不希望人们使用的带有文档的功能,但又不想从文件中删除它,这可能很有意义。
Chinoto Vokro '16

17

使用以下任一方法:

=开始
这个
是
一个
评论
块
=结束

要么

# 这个
#是
# 一个
#条评论
#块

是rdoc当前支持的仅有两个,这是仅使用我认为的这些的一个很好的理由。


1
坚持使用=begin或的另一个很好的理由#<<-DOC"语法在执行时都会生成无用的字符串文字。
心教堂

13
=begin
(some code here)
=end

# This code
# on multiple lines
# is commented out

都是正确的。第一种类型的注释的优点是可编辑性,因为删除了较少的字符,因此更易于取消注释。第二种类型的注释的优点是可读性-逐行读取代码,很容易分辨出特定的行已被注释掉。您打来的电话,但请考虑谁在追随您,以及他们阅读和维护它们有多容易。


IMO,=begin=end不会在视觉上传达的是在两者之间是一条评论... Clojure的,例如,使用(comment :whatever)其中的线索说,这意味着什么:stackoverflow.com/questions/1191628/block-comments-in-clojure
大卫J.14年

1
Java,C和C ++中的“ / *”和“ * /”都没有。与Ruby语法一样,在这两个字符之间可能会注释掉很大的代码块,并且所有了解该语言基础知识的人都知道它们的含义。
La-comadreja 2014年

1
语法着色(例如在vim中)表明第一种类型是注释。在这种情况下,第一种没有缺点。
卡米尔·古德塞内

12

这是一个例子:

=begin 
print "Give me a number:"
number = gets.chomp.to_f

total = number * 10
puts  "The total value is : #{total}"

=end

一切都在你之间发生=begin,并=end不管有多少行代码中包含之间将被视为注释。

注意:请确保=和之间没有空格begin

  • 正确: =begin
  • 错误: = begin

4

=begin comment line 1 comment line 2 =end 确保= begin和= end是该行的第一件事(无空格)


2

如果有人在Ruby on Rails中寻找在html模板中注释多行的方法,例如= begin = end可能有问题:

<%
=begin
%>
  ... multiple HTML lines to comment out
  <%= image_tag("image.jpg") %>
<%
=end
%>

将因%>关闭image_tag而失败。

在这种情况下,是否将其注释掉也许是有争议的,但是我更喜欢用“ if false”块将不需要的部分括起来:

<% if false %>
  ... multiple HTML lines to comment out
  <%= image_tag("image.jpg") %>
<% end %>

这将起作用。


0
  def idle
    <<~aid
    This is some description of what idle does.

    It does nothing actually, it's just here to show an example of multiline
    documentation. Thus said, this is something that is more common in the
    python community. That's an important point as it's good to also fit the
    expectation of your community of work. Now, if you agree with your team to
    go with a solution like this one for documenting your own base code, that's
    fine: just discuss about it with them first.

    Depending on your editor configuration, it won't be colored like a comment,
    like those starting with a "#". But as any keyword can be used for wrapping
    an heredoc, it is easy to spot anyway. One could even come with separated
    words for different puposes, so selective extraction for different types of
    documentation generation would be more practical. Depending on your editor,
    you possibly could configure it to use the same syntax highlight used for
    monoline comment when the keyword is one like aid or whatever you like.

    Also note that the squiggly-heredoc, using "~", allow to position
    the closing term with a level of indentation. That avoids to break the visual reading flow, unlike this far too long line.
    aid
  end

请注意,在发布本文时,stackoverflow引擎无法正确呈现语法颜色。作为练习,在您选择的编辑器中测试它的呈现方式。;)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.