Багаторядкові коментарі в Ruby?


746

Як я можу коментувати кілька рядків у Ruby?


7
Якщо хтось потрапляє на це, шукаючи багатолінійні коментарі в .ppманіфестах Лялькових (які базуються на синтаксисі, подібному до Ruby), ви можете використовувати блокові коментарі у стилі c /**/
msanford

6
Досить прикро, що багатолінійні коментарі в рубіні дуже схожі на блок коду. І з огляду на високі бали, присуджені цьому питанню (і прийняту відповідь), люди, які працюють над синтаксисом рубіну, повинні чітко подумати над цим.
Нік

Відповіді:


1354
#!/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або використовує метод тут. І, приємна робота.
Бляшаний чоловік

38
Цікаво, що ця відповідь робить очевидні деякі недоліки синтаксису.
ZoFreX

69
Не забувайте про це =beginі =endне може передувати жодному пробілу.
bergie3000

15
І не можна використовувати = begin = end в рамках методу
Albert Català

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

126
=begin
My 
multiline
comment
here
=end

4
Звичайно, ви могли це зробити. Це працює. Це неймовірно рідко. Я вважаю це некрасивим. Може, я застряг у своїх шляхах?
Девід Дж.

53
Я виявив, що якщо я включу вкладку до = початку або = кінця, коментарі не працюють. Кожен з початків і = кінців потрібно записати на початку кожного рядка.
Роза Перроне

1
ви не самотні @DavidJames. Я особисто вирішив, щоб вони все прокоментували моїм редактором. CMD + / або ALT + / є умовою для більшості.
anon58192932

1
@DavidJames, що б ти зробив замість цього? Наберіть a #і пробіл перед кожним рядком? Це дуже багато натискань на клавіші, особливо якщо я починаю додавати розриви рядків.
Пол Дрейпер

57

Незважаючи на існування =beginта =end, нормальним і правильнішим способом коментування є використання #s у кожному рядку. Якщо ви прочитаєте джерело будь-якої бібліотеки рубінів, то побачите, що саме так робляться багаторядкові коментарі майже у всіх випадках.


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, тому що я не мав уявлення, що гніздування є предметом у багатолінійних коментарях Рубі.
Парфянський розстріл

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

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

17

Використовуючи будь-який:

= почати
Це
є
а
коментар
блок
= кінець

або

# Це
# є
# a
# коментар
# блок

є єдиними двома, які на даний момент підтримуються rdoc, що є вагомою причиною для використання лише цих, я думаю.


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

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
David 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

4

=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.