Весьма прискорбно, что многострочные комментарии в ruby очень похожи на блок кода. И учитывая высокие баллы, присвоенные этому вопросу (и принятый ответ), люди, работающие над синтаксисом ruby, должны четко подумать об этом.
Ник
Ответы:
1356
#!/usr/bin/env ruby=beginEvery body mentioned this way
to have multiline comments.The=beginand=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.
Вот как это выглядит (через скриншот) - иначе трудно интерпретировать, как будут выглядеть вышеупомянутые комментарии. Нажмите, чтобы увеличить :
Я действительно предпочитаю использовать #их все, в основном потому, что визуально разделяет закомментированные строки лучше, чем =begin/ =endили используя метод here-to. И хорошая работа.
Жестянщик
38
Интересно, что этот ответ делает некоторые недостатки в подсветке синтаксиса очевидными.
ZoFreX
69
Не забывайте об этом, =beginи =endперед ним не должно быть пробелов.
bergie3000
15
И невозможно использовать = begin = end в методе
Альберт Катала
7
Важно отметить, что в приведенном выше примере кода rdoc обнаруживает только первый =begin...=endи последний использованный блок #при создании документации.
Конечно, вы могли бы сделать это. Оно работает. Это невероятно редко. Я нахожу это уродливым. Может быть, я застрял на моем пути?
Дэвид Дж.
53
Я обнаружил, что если я добавлю вкладку до = начало или = конец, комментарии не будут работать. Символы = begin и = end должны быть записаны в начале каждой строки.
Роуз Перроне
1
Вы не одиноки @DavidJames. Я лично решил, чтобы все они были закомментированы моим редактором. CMD + / или ALT + / - соглашение для большинства.
anon58192932
1
@DavidJames, что бы ты сделал вместо этого? Введите а #и пробел перед каждой строкой? Это много нажатий клавиш, особенно если я начинаю добавлять разрывы строк.
Пол Дрейпер
57
Несмотря на существование =beginи =end, нормальный и более правильный способ комментирования состоит в том, чтобы использовать #'s' в каждой строке. Если вы прочитаете источник любой библиотеки ruby, вы увидите, что именно так многострочные комментарии делаются почти во всех случаях.
Вы можете получить аргументы о «более правильной» части вашего утверждения, поскольку они оба действительны. Я предпочитаю использовать, #потому что это более очевидно. При комментировании кода важно, чтобы было очевидно, что именно так и произошло. Если вы просматриваете код, не пользуясь преимуществами раскраски кода в редакторе, это =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=beginBetween=beginand=end, any number
of lines may be written.All of these
lines are ignored by the Ruby interpreter.=end
puts "Hello world!"
+1, потому что я понятия не имел, вложения в многострочные комментарии Ruby.
Парфянский выстрел
2
@ParthianShot - Это не вещь - = начало и = конец игнорируются, если не в начале строки. Вложение не представляется возможным.
skagedal
Вложение комментария внутри комментария может привести либо к одному комментарию, либо к синтаксической ошибке из-за попытки завершить комментарий там, где нет комментария к концу. /*I am a\n#nested\ncomment, which really serves no purpose*//*I am bound /*to*/ FAIL!*/Это может иметь смысл, если у вас есть однострочные комментарии и код внутри многострочного комментария, например, функция с документацией, которую вы не хотите, чтобы люди использовали, но вы также не хотите удалять ее из файла.
Чиното Вокро
17
Используя либо:
= начать
Эта
является
комментарий
блок
= конец
или
# Эта
# является
# a
# комментарий
# блок
только два в настоящее время поддерживаются rdoc, что является хорошей причиной для использования только этих, я думаю.
Еще одна веская причина придерживаться =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будет рассматриваться как комментарий , независимо от того , сколько строк кода содержит между ними.
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 неправильно отображал синтаксическую окраску. Тестирование того, как оно отображается в выбранном вами редакторе, дается в качестве упражнения. ;)
.pp
манифестах Puppet (который основан на Ruby-подобном синтаксисе), вы можете использовать блочные комментарии в стиле c/**/
Ответы:
источник
#
их все, в основном потому, что визуально разделяет закомментированные строки лучше, чем=begin
/=end
или используя метод here-to. И хорошая работа.=begin
и=end
перед ним не должно быть пробелов.=begin...=end
и последний использованный блок#
при создании документации.источник
#
и пробел перед каждой строкой? Это много нажатий клавиш, особенно если я начинаю добавлять разрывы строк.Несмотря на существование
=begin
и=end
, нормальный и более правильный способ комментирования состоит в том, чтобы использовать#
's' в каждой строке. Если вы прочитаете источник любой библиотеки ruby, вы увидите, что именно так многострочные комментарии делаются почти во всех случаях.источник
#
потому что это более очевидно. При комментировании кода важно, чтобы было очевидно, что именно так и произошло. Если вы просматриваете код, не пользуясь преимуществами раскраски кода в редакторе, это=begin/=end
может затруднить выяснение причин, по которым код игнорируется.#
комментарии. (Я озадачен, почему у этого было два отрицательных голоса. Я предполагаю, что сообщество Переполнения стека должно иногда ошибаться!)3 == three
гдеdef three; 1 + 1 + 1 end
. Поэтому оба действительны. Какая разница? Используйте3
!vi
на рабочем сервере. В таком случае, вы, вероятно, не должны заниматься разработкой.источник
/*I am a\n#nested\ncomment, which really serves no purpose*/
/*I am bound /*to*/ FAIL!*/
Это может иметь смысл, если у вас есть однострочные комментарии и код внутри многострочного комментария, например, функция с документацией, которую вы не хотите, чтобы люди использовали, но вы также не хотите удалять ее из файла.Используя либо:
или
только два в настоящее время поддерживаются rdoc, что является хорошей причиной для использования только этих, я думаю.
источник
=begin
или#
заключается в том, что оба<<-DOC
и"
синтаксис будут генерировать бесполезные строковые литералы при исполнении.а также
оба правильны. Преимущество первого типа комментариев - возможность редактирования - их легче раскомментировать, потому что удаляется меньше символов. Преимущество комментариев второго типа заключается в удобочитаемости - читая код построчно, гораздо проще сказать, что конкретная строка была закомментирована. Ваш звонок, но подумайте о том, кто придет за вами, и как легко им читать и вести.
источник
=begin
и=end
визуально не передайте, что то, что находится между ними, является комментарием ... Например, Clojure использует то,(comment :whatever)
что в лидерах говорит, что это значит: stackoverflow.com/questions/1191628/block-comments-in-clojureВот пример:
Все , что вы поместите между ними
=begin
и=end
будет рассматриваться как комментарий , независимо от того , сколько строк кода содержит между ними.Примечание: убедитесь, что между
=
иbegin
:=begin
= begin
источник
=begin comment line 1 comment line 2 =end
убедитесь, что = начало и = конец - это первое, что есть в этой строке (без пробелов)источник
В случае, если кто-то ищет способ комментировать несколько строк в шаблоне html в Ruby on Rails, может быть проблема с = begin = end, например:
потерпит неудачу из-за%> закрытия image_tag.
В этом случае, может быть, это спорно ли это закомментировать или нет, но я предпочитаю, чтобы заключить нежелательный раздел с «если» ложным блоком:
Это будет работать
источник
Обратите внимание, что на момент публикации движок stackoverflow неправильно отображал синтаксическую окраску. Тестирование того, как оно отображается в выбранном вами редакторе, дается в качестве упражнения. ;)
источник