ความคิดเห็นหลายสายใน Ruby?


746

ฉันจะแสดงความคิดเห็นหลายบรรทัดใน Ruby ได้อย่างไร


7
ในกรณีที่ทุกคนตกอยู่ในนี้มองสำหรับความคิดเห็นในหลายหุ่น.ppแสดงออก (ซึ่งจะขึ้นอยู่กับทับทิมเหมือนไวยากรณ์) คุณสามารถใช้คสไตล์ความคิดเห็นบล็อก /**/
msanford

6
ค่อนข้างโชคร้ายที่ความคิดเห็นหลายบรรทัดในทับทิมนั้นดูคล้ายกับโค้ด และเมื่อได้รับคะแนนสูงจากคำถามนี้ (และคำตอบที่ได้รับการยอมรับ) คนที่ทำงานเกี่ยวกับไวยากรณ์ทับทิมควรคิดอย่างชัดเจนเกี่ยวกับเรื่องนี้
Nick

คำตอบ:


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หรือใช้วิธีที่นี่เพื่อ และเป็นงานที่ดี
Tin Man

38
เป็นที่น่าสนใจว่าคำตอบนี้ทำให้ข้อบกพร่องบางอย่างในปากกาเน้นข้อความเน้นได้ชัดเจน
ZoFreX

69
อย่าลืมสิ่งนั้น=beginและ=endไม่สามารถนำหน้าด้วยช่องว่างใด ๆ
bergie3000

15
และเป็นไปไม่ได้ที่จะใช้ = start = end ภายในเมธอด
Albert Català

7
สิ่งสำคัญที่ควรทราบคือในโค้ดตัวอย่างด้านบนเฉพาะrdoc ที่ใช้ในการสร้าง=begin...=endบล็อกแรกและบล็อกสุดท้าย#เท่านั้น
คนดีบุก

126
=begin
My 
multiline
comment
here
=end

4
แน่นอนคุณสามารถทำได้ มันได้ผล. นี่เป็นของหายากอย่างไม่น่าเชื่อ ฉันพบว่ามันน่าเกลียด บางทีฉันอาจติดอยู่ในทางของฉัน?
David J.

53
ฉันพบว่าหากฉันรวมแท็บก่อน = เริ่มต้นหรือ = สิ้นสุดความคิดเห็นจะไม่ทำงาน = เริ่มต้นและ = จบแต่ละอันจะต้องมีการเขียนที่จุดเริ่มต้นของแต่ละบรรทัด
Rose Perrone

1
คุณไม่ได้อยู่คนเดียว @DavidJames ฉันเลือกที่จะให้พวกเขาแสดงความคิดเห็นโดยบรรณาธิการของฉันเป็นการส่วนตัว CMD + / หรือ ALT + / เป็นแบบแผนสำหรับส่วนใหญ่
anon58192932

1
@DavidJames คุณจะทำอะไรแทน พิมพ์#และช่องว่างก่อนทุกบรรทัด? การกดแป้นหลายครั้งโดยเฉพาะอย่างยิ่งถ้าฉันเริ่มเพิ่มตัวแบ่งบรรทัด
พอลเดรเปอร์

57

แม้จะมีอยู่=beginและ=endวิธีปกติและวิธีที่ถูกต้องมากขึ้นในการแสดงความคิดเห็นคือการใช้งาน#ในแต่ละบรรทัด หากคุณอ่านแหล่งที่มาของไลบรารีทับทิมใด ๆ คุณจะเห็นว่านี่เป็นวิธีการแสดงความคิดเห็นแบบหลายบรรทัดในเกือบทุกกรณี


4
คุณอาจได้รับข้อโต้แย้งเกี่ยวกับส่วน "ถูกต้องมากขึ้น" ของคำชี้แจงของคุณเนื่องจากทั้งคู่ใช้ได้ ฉันชอบใช้#เพราะเห็นได้ชัดกว่า เมื่อแสดงความคิดเห็นรหัสเป็นสิ่งสำคัญที่จะทำให้มันชัดเจนว่าเป็นสิ่งที่เกิดขึ้น หากคุณกำลังดูโค้ดโดยไม่ได้รับประโยชน์จากการกำหนดสีโค้ดในโปรแกรมแก้ไข=begin/=endสามารถทำให้ยากที่จะทราบว่าเพราะเหตุใดรหัสจึงถูกละเว้น
Tin Man

6
แน่นอนว่ามีวิธีการที่ถูกต้องในการเขียนความคิดเห็น มาฝึกปฏิบัติกันที่นี่ หากคุณเขียน Ruby จริงและอ่านสิ่งที่คนอื่นเขียนคุณควรใช้#ความคิดเห็น (ฉันประหลาดใจว่าทำไมเรื่องนี้ถึงมีสอง downvotes ฉันคิดว่าชุมชน Stack Overflow ต้องทำให้มันผิดในบางครั้ง!)
David J.

4
3 == threedef three; 1 + 1 + 1 endที่ไหน ดังนั้นทั้งคู่จึงใช้ได้ ใครสน? ใช้3!
David J.

1
@TheTinMan ในขณะที่เป็นจริงโดยทั่วไปเวลาเดียวที่คุณขาดการเน้นไวยากรณ์ (จากประสบการณ์ของฉัน) คือเมื่อคุณใช้viบนเซิร์ฟเวอร์ที่ใช้งานจริง ในกรณีนี้คุณอาจไม่ควรทำการพัฒนาที่นั่นอยู่ดี
ต่อสู้ยิง

1
@DavidJames ตัวอย่างของคุณไร้สาระเพราะมันละเอียดมากขึ้น การใส่แฮชในทุกบรรทัดจะมีความคิดเห็นที่มากขึ้น และถ้าใครคิดว่าวลี "/ dev / urandom ถูกใช้ที่นี่เพื่อการบล็อก PRNG ที่ไม่มีการบล็อก cryptographically-sound อย่าแตะรหัสนี้ - มันเป็นเวทมนตร์" คือความพยายามของฉันในการเขียนทับทิมฉันจะโต้แย้งความสับสนของพวกเขามากขึ้น ส่วนหนึ่งขาดความชัดเจนในเหมือง ซึ่งไม่ได้บอกว่าจุดของคุณนั้นไม่ถูกต้องเสมอไป - มันเป็นเพียงจุดที่ดีเมื่อแสดงความคิดเห็นโค้ด แต่ถ้าความคิดเห็นของคุณเป็นเพียง ... ความคิดเห็น ... มันควรจะชัดเจนทั้งสองวิธี
คู่ปรับ 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!"

1
+1 เพราะฉันไม่มีความคิดในการซ้อนเป็นสิ่งหนึ่งในความคิดเห็นของ Ruby multiline
คู่ปรับ Shot

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 ++ เช่นเดียวกับไวยากรณ์ทับทิมบล็อกโค้ดขนาดใหญ่อาจถูกคอมเม้นต์ระหว่างตัวละครทั้งสองและทุกคนที่รู้พื้นฐานของภาษารู้ว่าพวกเขาหมายถึงอะไร
La-comadreja

1
การระบายสีไวยากรณ์ (เป็นกลุ่ม) แสดงให้เห็นว่าประเภทแรกคือความคิดเห็น ในกรณีนั้นประเภทแรกไม่มีข้อเสีย
Camille Goudeseune

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 อาจมีปัญหากับ = start = end ตัวอย่างเช่น:

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

จะล้มเหลวเนื่องจากการ%> ปิด image_tag

ในกรณีนี้มันอาจจะพิสูจน์ได้ว่าสิ่งนี้เป็นการแสดงความคิดเห็นหรือไม่ แต่ฉันชอบที่จะใส่ส่วนที่ไม่พึงประสงค์ด้วยบล็อก "if false":

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

โปรดทราบว่าในขณะที่ทำการโพสต์เอ็นจิ้นสแต็คโอเวอร์โฟลว์ไม่แสดงสีไวยากรณ์อย่างถูกต้อง การทดสอบว่าการแก้ไขในตัวเลือกที่คุณเลือกนั้นเป็นแบบฝึกหัดได้อย่างไร ;)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.