Многострочные комментарии в Ruby?


747

Как я могу прокомментировать несколько строк в Ruby?


7
В случае, если кто-то упадет в поиске многострочных комментариев в .ppманифестах Puppet (который основан на Ruby-подобном синтаксисе), вы можете использовать блочные комментарии в стиле c /**/
msanford

6
Весьма прискорбно, что многострочные комментарии в ruby ​​очень похожи на блок кода. И учитывая высокие баллы, присвоенные этому вопросу (и принятый ответ), люди, работающие над синтаксисом ruby, должны четко подумать об этом.
Ник

Ответы:


1356
#!/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. И хорошая работа.
Жестянщик

38
Интересно, что этот ответ делает некоторые недостатки в подсветке синтаксиса очевидными.
ZoFreX

69
Не забывайте об этом, =beginи =endперед ним не должно быть пробелов.
bergie3000

15
И невозможно использовать = begin = end в методе
Альберт Катала

7
Важно отметить, что в приведенном выше примере кода rdoc обнаруживает только первый =begin...=endи последний использованный блок #при создании документации.
Жестянщик

126
=begin
My 
multiline
comment
here
=end

4
Конечно, вы могли бы сделать это. Оно работает. Это невероятно редко. Я нахожу это уродливым. Может быть, я застрял на моем пути?
Дэвид Дж.

53
Я обнаружил, что если я добавлю вкладку до = начало или = конец, комментарии не будут работать. Символы = begin и = end должны быть записаны в начале каждой строки.
Роуз Перроне

1
Вы не одиноки @DavidJames. Я лично решил, чтобы все они были закомментированы моим редактором. CMD + / или ALT + / - соглашение для большинства.
anon58192932

1
@DavidJames, что бы ты сделал вместо этого? Введите а #и пробел перед каждой строкой? Это много нажатий клавиш, особенно если я начинаю добавлять разрывы строк.
Пол Дрейпер

57

Несмотря на существование =beginи =end, нормальный и более правильный способ комментирования состоит в том, чтобы использовать #'s' в каждой строке. Если вы прочитаете источник любой библиотеки ruby, вы увидите, что именно так многострочные комментарии делаются почти во всех случаях.


4
Вы можете получить аргументы о «более правильной» части вашего утверждения, поскольку они оба действительны. Я предпочитаю использовать, #потому что это более очевидно. При комментировании кода важно, чтобы было очевидно, что именно так и произошло. Если вы просматриваете код, не пользуясь преимуществами раскраски кода в редакторе, это =begin/=endможет затруднить выяснение причин, по которым код игнорируется.
Жестянщик

6
Конечно, есть много «правильных» способов написания комментариев. Давайте будем практичными здесь. Если вы действительно пишете Ruby и читаете то, что пишут другие, вы должны использовать #комментарии. (Я озадачен, почему у этого было два отрицательных голоса. Я предполагаю, что сообщество Переполнения стека должно иногда ошибаться!)
Дэвид Дж.

4
3 == threeгде def three; 1 + 1 + 1 end. Поэтому оба действительны. Какая разница? Используйте 3!
Дэвид Дж.

1
@theTinMan Хотя это правда, как правило, единственный раз, когда вам не хватает подсветки синтаксиса (по моему опыту), это когда вы используете viна рабочем сервере. В таком случае, вы, вероятно, не должны заниматься разработкой.
Парфянский выстрел

1
@DavidJames Ваш пример смешной, потому что он более многословный. Размещение хеша в каждой строке более многословно для более длинных комментариев. И если кто-то думает, что фраза «/ dev / urandom была использована здесь для неблокирующего криптографически обоснованного PRNG. Не трогайте этот код - это волшебство» - моя попытка написать рубин, я бы сказал, что их путаница возникает скорее из-за незнания их часть, чем отсутствие ясности на моем. Это не означает, что ваша точка зрения всегда неверна - она ​​только хороша при комментировании кода. Но если ваш комментарий просто ... комментарий ... это должно быть ясно в любом случае.
Парфянский выстрел

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.
Парфянский выстрел

2
@ParthianShot - Это не вещь - = начало и = конец игнорируются, если не в начале строки. Вложение не представляется возможным.
skagedal

Вложение комментария внутри комментария может привести либо к одному комментарию, либо к синтаксической ошибке из-за попытки завершить комментарий там, где нет комментария к концу. /*I am a\n#nested\ncomment, which really serves no purpose*/ /*I am bound /*to*/ FAIL!*/Это может иметь смысл, если у вас есть однострочные комментарии и код внутри многострочного комментария, например, функция с документацией, которую вы не хотите, чтобы люди использовали, но вы также не хотите удалять ее из файла.
Чиното Вокро

17

Используя либо:

= начать
Эта
является

комментарий
блок
= конец

или

# Эта
# является
# a
# комментарий
# блок

только два в настоящее время поддерживаются rdoc, что является хорошей причиной для использования только этих, я думаю.


1
Еще одна веская причина придерживаться =beginили #заключается в том, что оба <<-DOCи "синтаксис будут генерировать бесполезные строковые литералы при исполнении.
Cœur

13
=begin
(some code here)
=end

а также

# This code
# on multiple lines
# is commented out

оба правильны. Преимущество первого типа комментариев - возможность редактирования - их легче раскомментировать, потому что удаляется меньше символов. Преимущество комментариев второго типа заключается в удобочитаемости - читая код построчно, гораздо проще сказать, что конкретная строка была закомментирована. Ваш звонок, но подумайте о том, кто придет за вами, и как легко им читать и вести.


ИМО, =beginи =endвизуально не передайте, что то, что находится между ними, является комментарием ... Например, Clojure использует то, (comment :whatever)что в лидерах говорит, что это значит: stackoverflow.com/questions/1191628/block-comments-in-clojure
Дэвид J.

1
Также не делают "/ *" и "* /" в Java, C и C ++. Как и в случае синтаксиса Ruby, большие блоки кода могут быть закомментированы между этими двумя символами, и каждый, кто знает основы языка, знает, что они означают.
La-comadreja

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

5

=begin comment line 1 comment line 2 =end убедитесь, что = начало и = конец - это первое, что есть в этой строке (без пробелов)


2

В случае, если кто-то ищет способ комментировать несколько строк в шаблоне html в Ruby on Rails, может быть проблема с = begin = end, например:

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

потерпит неудачу из-за%> закрытия image_tag.

В этом случае, может быть, это спорно ли это закомментировать или нет, но я предпочитаю, чтобы заключить нежелательный раздел с «если» ложным блоком:

<% 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 неправильно отображал синтаксическую окраску. Тестирование того, как оно отображается в выбранном вами редакторе, дается в качестве упражнения. ;)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.