Il est plutôt regrettable que les commentaires multilignes en ruby ressemblent beaucoup à un bloc de code. Et compte tenu des points forts attribués à cette question (et de la réponse acceptée), les personnes travaillant sur la syntaxe rubis devraient clairement y réfléchir un peu.
Nick
Réponses:
1354
#!/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.
Voici à quoi cela ressemble (via capture d'écran) - sinon il est difficile d'interpréter à quoi ressembleront les commentaires ci-dessus. Cliquez pour agrandir :
Je préfère vraiment les utiliser #tous, principalement parce que cela sépare visuellement les lignes commentées mieux que =begin/ =endou en utilisant la méthode here-to. Et, beau travail.
The Tin Man
38
Il est intéressant de noter que cette réponse met en évidence certains défauts dans le surligneur de syntaxe.
ZoFreX
69
N'oubliez pas cela =beginet =endne pouvez être précédé d'aucun espace.
bergie3000
15
Et il n'est pas possible d'utiliser = begin = end au sein d'une méthode
Albert Català
7
Il est important de noter que dans l'exemple de code ci-dessus, seuls le premier =begin...=endet le dernier bloc utilisant #sont récupérés par rdoc lors de la génération de la documentation.
Bien sûr, vous pourriez le faire. Ça marche. C'est incroyablement rare. Je trouve ça moche. Peut-être que je suis coincé dans mes voies?
David J.
53
J'ai trouvé que si j'inclus un onglet avant = début ou = fin, les commentaires ne fonctionnent pas. Les caractères = begin et = end doivent être écrits au début de chaque ligne.
Rose Perrone
1
vous n'êtes pas seul @DavidJames. J'ai personnellement choisi de les faire tous commenter par mon éditeur. CMD + / ou ALT + / est la convention pour la plupart.
anon58192932
1
@DavidJames, que feriez-vous à la place? Tapez a #et espace avant chaque ligne? C'est beaucoup de touches, surtout si je commence à ajouter des sauts de ligne.
Paul Draper
57
Malgré l'existence de =beginet =end, la manière normale et plus correcte de commenter consiste à utiliser #des sur chaque ligne. Si vous lisez la source d'une bibliothèque ruby, vous verrez que c'est la façon dont les commentaires sur plusieurs lignes sont effectués dans presque tous les cas.
Vous pouvez obtenir des arguments sur la partie "plus correcte" de votre déclaration car elles sont toutes les deux valides. Je préfère utiliser #car c'est plus évident. Lorsque vous commentez du code, il est important de montrer clairement que c'est ce qui s'est produit. Si vous visualisez le code sans l'avantage de la coloration du code dans un éditeur, il =begin/=endpeut être difficile de comprendre pourquoi le code est ignoré.
The Tin Man
6
Bien sûr, il existe de nombreuses façons "valides" d'écrire des commentaires. Soyons pratiques ici. Si vous écrivez réellement Ruby et lisez ce que les autres écrivent, vous devriez utiliser des #commentaires. (Je suis mystifié pourquoi cela a eu deux downvotes. Je suppose que la communauté Stack Overflow doit parfois se tromper!)
David J.
4
3 == threeoù def three; 1 + 1 + 1 end. Par conséquent, les deux sont valides. On s'en fout? Utilisez 3!
David J.
1
@theTinMan Bien que cela soit vrai, généralement la seule fois où vous manquez de mise en évidence de la syntaxe (selon mon expérience) est lorsque vous utilisez visur un serveur de production. Dans ce cas, vous ne devriez probablement pas y faire votre développement de toute façon.
Parthian Shot
1
@DavidJames Votre exemple est ridicule car il est plus bavard. Mettre un hachage sur chaque ligne est plus détaillé pour les commentaires plus longs. Et si quelqu'un pense que la phrase "/ dev / urandom a été utilisée ici pour le PRNG non bloquant cryptographiquement sain. Ne touchez pas ce code - c'est magique" est ma tentative d'écrire ruby, je dirais que leur confusion provient plus de l'ignorance sur leur en partie que le manque de clarté sur le mien. Ce qui ne veut pas dire que votre point est toujours invalide - c'est juste un bon point lorsque vous commentez du code. Mais si votre commentaire est juste ... un commentaire ... il devrait être clair de toute façon.
Parthian Shot
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 parce que je n'avais aucune idée que l'imbrication était une chose dans les commentaires multilignes Ruby.
Parthian Shot
2
@ParthianShot - Ce n'est pas une chose - = début et = fin sont ignorés sinon au début d'une ligne. L'imbrication ne semble pas possible.
skagedal
L'imbrication d'un commentaire à l'intérieur d'un commentaire entraînerait soit un seul commentaire, soit une erreur de syntaxe d'essayer de terminer un commentaire là où il n'y a pas de commentaire à terminer. /*I am a\n#nested\ncomment, which really serves no purpose*//*I am bound /*to*/ FAIL!*/Cela peut avoir du sens si vous avez des commentaires sur une seule ligne et du code à l'intérieur d'un commentaire multiligne, comme une fonction avec une documentation que vous ne voulez pas que les gens utilisent, mais vous ne voulez pas non plus le supprimer du fichier.
Chinoto Vokro
17
En utilisant soit:
= commencer
Cette
est
une
commentaire
bloquer
= fin
ou
# Cette
# est
# une
# commentaire
# bloquer
sont les deux seuls actuellement pris en charge par rdoc, ce qui est une bonne raison de ne les utiliser que je pense.
Une autre bonne raison de s'en tenir à =beginou #est que les deux <<-DOCet les "syntaxes généreront des littéraux de chaîne inutiles à l'exécution.
Cœur
13
=begin(some code here)=end
et
# This code# on multiple lines# is commented out
sont tous les deux corrects. L'avantage du premier type de commentaire est la possibilité de modification - il est plus facile de décommenter car moins de caractères sont supprimés. L'avantage du deuxième type de commentaire est la lisibilité - en lisant le code ligne par ligne, il est beaucoup plus facile de dire qu'une ligne particulière a été mise en commentaire. Votre appel, mais pensez à qui vient après vous et à quel point il est facile à lire et à maintenir.
IMO, =beginet =endne transmet pas visuellement que ce qui est entre les deux est un commentaire ... Clojure, par exemple, utilise (comment :whatever)ce qui, au conduit, dit ce que cela signifie: stackoverflow.com/questions/1191628/block-comments-in-clojure
David J.
1
Ni "/ *" ni "* /" en Java, C et C ++. Comme avec la syntaxe Ruby, de gros blocs de code peuvent être commentés entre ces deux caractères, et tous ceux qui connaissent les bases du langage savent ce qu'ils signifient.
La-comadreja
1
La coloration de la syntaxe (dans vim, par exemple) montre que le premier type est un commentaire. Dans ce cas, le premier type n'a aucun inconvénient.
Camille Goudeseune
12
Voici un exemple :
=begin
print "Give me a number:"
number = gets.chomp.to_f
total = number *10
puts "The total value is : #{total}"=end
Tout ce que vous placez entre =beginet =endsera traité comme un commentaire, quel que soit le nombre de lignes de code qu'il contient entre.
Remarque: assurez-vous qu'il n'y a pas d'espace entre =et begin:
Si quelqu'un cherche un moyen de commenter plusieurs lignes dans un modèle html dans Ruby on Rails, il peut y avoir un problème avec = begin = end, par exemple:
<%=begin%>... multiple HTML lines to comment out
<%= image_tag("image.jpg")%><%=end%>
échouera à cause de%> la fermeture de l'image_tag.
Dans ce cas, il est peut-être discutable qu'il s'agisse d'un commentaire ou non, mais je préfère entourer la section indésirable d'un bloc "si faux":
<%iffalse%>... multiple HTML lines to comment out
<%= image_tag("image.jpg")%><%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
Notez qu'au moment de la publication, le moteur stackoverflow ne rend pas correctement la coloration de la syntaxe. Tester le rendu dans l'éditeur de votre choix est considéré comme un exercice. ;)
.pp
manifestes Puppet (qui est basé sur une syntaxe de type Ruby), vous pouvez utiliser des commentaires de bloc de style c/**/
Réponses:
la source
#
tous, principalement parce que cela sépare visuellement les lignes commentées mieux que=begin
/=end
ou en utilisant la méthode here-to. Et, beau travail.=begin
et=end
ne pouvez être précédé d'aucun espace.=begin...=end
et le dernier bloc utilisant#
sont récupérés par rdoc lors de la génération de la documentation.la source
#
et espace avant chaque ligne? C'est beaucoup de touches, surtout si je commence à ajouter des sauts de ligne.Malgré l'existence de
=begin
et=end
, la manière normale et plus correcte de commenter consiste à utiliser#
des sur chaque ligne. Si vous lisez la source d'une bibliothèque ruby, vous verrez que c'est la façon dont les commentaires sur plusieurs lignes sont effectués dans presque tous les cas.la source
#
car c'est plus évident. Lorsque vous commentez du code, il est important de montrer clairement que c'est ce qui s'est produit. Si vous visualisez le code sans l'avantage de la coloration du code dans un éditeur, il=begin/=end
peut être difficile de comprendre pourquoi le code est ignoré.#
commentaires. (Je suis mystifié pourquoi cela a eu deux downvotes. Je suppose que la communauté Stack Overflow doit parfois se tromper!)3 == three
oùdef three; 1 + 1 + 1 end
. Par conséquent, les deux sont valides. On s'en fout? Utilisez3
!vi
sur un serveur de production. Dans ce cas, vous ne devriez probablement pas y faire votre développement de toute façon.la source
/*I am a\n#nested\ncomment, which really serves no purpose*/
/*I am bound /*to*/ FAIL!*/
Cela peut avoir du sens si vous avez des commentaires sur une seule ligne et du code à l'intérieur d'un commentaire multiligne, comme une fonction avec une documentation que vous ne voulez pas que les gens utilisent, mais vous ne voulez pas non plus le supprimer du fichier.En utilisant soit:
ou
sont les deux seuls actuellement pris en charge par rdoc, ce qui est une bonne raison de ne les utiliser que je pense.
la source
=begin
ou#
est que les deux<<-DOC
et les"
syntaxes généreront des littéraux de chaîne inutiles à l'exécution.et
sont tous les deux corrects. L'avantage du premier type de commentaire est la possibilité de modification - il est plus facile de décommenter car moins de caractères sont supprimés. L'avantage du deuxième type de commentaire est la lisibilité - en lisant le code ligne par ligne, il est beaucoup plus facile de dire qu'une ligne particulière a été mise en commentaire. Votre appel, mais pensez à qui vient après vous et à quel point il est facile à lire et à maintenir.
la source
=begin
et=end
ne transmet pas visuellement que ce qui est entre les deux est un commentaire ... Clojure, par exemple, utilise(comment :whatever)
ce qui, au conduit, dit ce que cela signifie: stackoverflow.com/questions/1191628/block-comments-in-clojureVoici un exemple :
Tout ce que vous placez entre
=begin
et=end
sera traité comme un commentaire, quel que soit le nombre de lignes de code qu'il contient entre.Remarque: assurez-vous qu'il n'y a pas d'espace entre
=
etbegin
:=begin
= begin
la source
=begin comment line 1 comment line 2 =end
assurez-vous que = begin et = end est la première chose sur cette ligne (pas d'espaces)la source
Si quelqu'un cherche un moyen de commenter plusieurs lignes dans un modèle html dans Ruby on Rails, il peut y avoir un problème avec = begin = end, par exemple:
échouera à cause de%> la fermeture de l'image_tag.
Dans ce cas, il est peut-être discutable qu'il s'agisse d'un commentaire ou non, mais je préfère entourer la section indésirable d'un bloc "si faux":
Cela fonctionnera.
la source
Notez qu'au moment de la publication, le moteur stackoverflow ne rend pas correctement la coloration de la syntaxe. Tester le rendu dans l'éditeur de votre choix est considéré comme un exercice. ;)
la source