Comentarios de varias líneas en Ruby?

746

¿Cómo puedo comentar varias líneas en Ruby?

Mohit Jain
fuente
77
En caso de que alguien caiga en esta búsqueda de comentarios de.pp /**/
varias líneas
66
Es bastante desafortunado que los comentarios multilínea en ruby ​​se parezcan mucho a un bloque de código. Y dados los altos puntos otorgados a esta pregunta (y la respuesta aceptada), las personas que trabajan en la sintaxis ruby ​​deberían pensar claramente un poco al respecto.
Nick

Respuestas:

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.
  • Así es como se ve (a través de la captura de pantalla); de lo contrario, es difícil interpretar cómo se verán los comentarios anteriores. Haga clic para acercar :

Comentarios en un editor de texto

Konstantin Haase
fuente
26
Realmente prefiero usar #sobre todos ellos, principalmente porque separa visualmente las líneas comentadas mejor que =begin/ =endo usando el método here-to. Y buen trabajo.
The Tin Man, el
38
Es interesante que esta respuesta haga obvias algunas fallas en el resaltador de sintaxis.
ZoFreX
69
No lo olvide =beginy =endno puede ser precedido por ningún espacio en blanco.
bergie3000
15
Y no es posible usar = begin = end dentro de un método
Albert Català
77
Es importante tener en cuenta que en el código de ejemplo anterior, rdoc solo recoge el primer =begin...=endy el último bloque que #se usa al generar la documentación.
The Tin Man
126
=begin
My 
multiline
comment
here
=end
Adam Lear
fuente
44
Claro, usted podría hacer esto. Funciona. Esto es increíblemente raro. Lo encuentro feo. Tal vez estoy atrapado en mis caminos?
David J.
53
Descubrí que si incluyo una pestaña antes = comenzar o = finalizar, los comentarios no funcionan. El = comenzar y = terminar cada uno debe escribirse al comienzo de cada línea.
Rose Perrone
1
No estás solo @DavidJames. Personalmente he optado por que mi editor los comente a todos. CMD + / o ALT + / es la convención para la mayoría.
anon58192932
1
@DavidJames, ¿qué harías en su lugar? Escriba ay #espacio antes de cada línea? Son muchas pulsaciones de teclas, especialmente si empiezo a agregar saltos de línea.
Paul Draper
57

A pesar de la existencia de =beginy =end, la forma normal y más correcta de comentar es usar #'s en cada línea. Si lee la fuente de cualquier biblioteca de ruby, verá que esta es la forma en que se hacen comentarios de varias líneas en casi todos los casos.

Rein Henrichs
fuente
44
Puede obtener argumentos sobre la parte "más correcta" de su declaración, ya que ambos son válidos. Prefiero usar #porque es más obvio. Al comentar el código, es importante que sea obvio que eso es lo que sucedió. Si está viendo el código sin el beneficio de colorear el código en un editor, =begin/=endpuede ser difícil descubrir por qué se ignora el código.
The Tin Man
66
Claro, hay muchas formas "válidas" de escribir comentarios. Seamos prácticos aquí. Si realmente escribes Ruby y lees lo que otros escriben, deberías estar usando #comentarios. (Estoy desconcertado por qué esto tuvo dos votos negativos. ¡Supongo que la comunidad de Stack Overflow tiene que equivocarse a veces!)
David J.
44
3 == threedonde def three; 1 + 1 + 1 end. Por lo tanto, ambos son válidos. ¿A quien le importa? Uso 3!
David J.
1
@theTinMan Si bien es cierto, en general, la única vez que le faltaría resaltar la sintaxis (en mi experiencia) es cuando está usando viun servidor de producción. En ese caso, probablemente no deberías estar haciendo tu desarrollo allí, de todos modos.
Parthian Shot
1
@DavidJames Su ejemplo es ridículo porque es más detallado. Poner un hash en cada línea es más detallado para comentarios más largos. Y si alguien piensa que la frase "/ dev / urandom se usó aquí para el PRNG sin bloqueo de sonido criptográfico. No toque este código, es mágico" es mi intento de escribir ruby, diría que su confusión surge más de la ignorancia en su parte de la falta de claridad sobre la mía. Lo que no quiere decir que su punto siempre sea inválido, es solo uno bueno al comentar el código. Pero si su comentario es solo ... comentario ... debe quedar claro de cualquier manera.
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!"
miku
fuente
1
+1 porque no tenía idea de que anidar era una cosa en los comentarios multilínea de Ruby.
Parthian Shot
2
@ParthianShot - No es una cosa - = comienzo y = fin son ignorados si no al comienzo de una línea. La anidación no parece ser posible.
skagedal
Anidar un comentario dentro de un comentario daría como resultado un solo comentario o un error de sintaxis al intentar finalizar un comentario donde no hay ningún comentario para finalizar. /*I am a\n#nested\ncomment, which really serves no purpose*/ /*I am bound /*to*/ FAIL!*/Podría tener sentido si tiene comentarios de una sola línea y código dentro de un comentario de varias líneas, como una función con documentación que no desea que las personas usen, pero tampoco desea eliminarlo del archivo.
Chinoto Vokro
17

Usando:

= comenzar
Esta
es
una
comentario
bloquear
= fin

o

# Esta
# es
# una
# comentario
# bloque

son los dos únicos actualmente soportados por rdoc, lo cual es una buena razón para usar solo estos, creo.

el hombre de hojalata
fuente
1
Otra buena razón para seguir =begino #es que ambas <<-DOCy las "sintaxis generarán literales de cadena inútiles en la ejecución.
Cœur
13
=begin
(some code here)
=end

y

# This code
# on multiple lines
# is commented out

Son ambos correctos. La ventaja del primer tipo de comentario es la editabilidad: es más fácil descomentar porque se eliminan menos caracteres. La ventaja del segundo tipo de comentario es la legibilidad: al leer el código línea por línea, es mucho más fácil saber que una línea en particular ha sido comentada. Tu llamada, pero piensa en quién vendrá después de ti y qué tan fácil es para ellos leer y mantener.

La comadreja
fuente
OMI, =beginy =endno transmite visualmente que lo que está en el medio es un comentario ... Clojure, por ejemplo, usa lo (comment :whatever)que en el plomo dice lo que significa: stackoverflow.com/questions/1191628/block-comments-in-clojure
David J.
1
Tampoco "/ *" y "* /" en Java, C y C ++. Al igual que con la sintaxis de Ruby, se pueden comentar grandes bloques de código entre esos dos caracteres, y todos los que conocen los conceptos básicos del lenguaje saben lo que significan.
La-comadreja
1
La coloración de sintaxis (en vim, por ejemplo) muestra que el primer tipo es un comentario. En ese caso, el primer tipo no tiene desventajas.
Camille Goudeseune
12

Aquí hay un ejemplo :

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

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

=end

Todo lo que coloques en el medio =beginy =endserá tratado como un comentario, independientemente de cuántas líneas de código contenga.

Nota: Asegúrese de que no haya espacio entre =y begin:

  • Correcto: =begin
  • Incorrecto: = begin
Prabhakar Undurthi
fuente
5

=begin comment line 1 comment line 2 =end asegúrese de que = begin y = end es lo primero en esa línea (sin espacios)

anandharshan
fuente
2

En caso de que alguien esté buscando una manera de comentar varias líneas en una plantilla html en Ruby on Rails, podría haber un problema con = begin = end, por ejemplo:

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

fallará debido a que%> cierra la etiqueta_imagen.

En este caso, tal vez sea discutible si esto está comentando o no, pero prefiero encerrar la sección no deseada con un bloque "si es falso":

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

Esto funcionará

usuario2553863
fuente
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

Tenga en cuenta que en el momento de la publicación, el motor de stackoverflow no representa la coloración de sintaxis correctamente. Probar cómo se muestra en el editor de su elección se deja como un ejercicio. ;)

psicoslave
fuente