ฉันจริงๆใหม่เพื่อทับทิมและฉันพยายามที่จะเข้าใจว่ามีเวลาที่เฉพาะเจาะจงเมื่อฉันควรใช้VS""
''
ฉันใช้เครื่องหมายคำพูดเดี่ยวบ่อยครั้งเพราะพิมพ์ง่ายกว่า แต่ฉันไม่แน่ใจว่าควร
เช่นget 'user/new'
vsget "user/new"
ฉันจริงๆใหม่เพื่อทับทิมและฉันพยายามที่จะเข้าใจว่ามีเวลาที่เฉพาะเจาะจงเมื่อฉันควรใช้VS""
''
ฉันใช้เครื่องหมายคำพูดเดี่ยวบ่อยครั้งเพราะพิมพ์ง่ายกว่า แต่ฉันไม่แน่ใจว่าควร
เช่นget 'user/new'
vsget "user/new"
คำตอบ:
" "
ช่วยให้คุณทำการแก้ไขสตริงเช่น:
world_type = 'Mars'
"Hello #{world_type}"
ยกเว้นการแก้ไขความแตกต่างอีกอย่างคือ 'ลำดับหนี' ไม่ทำงานในเครื่องหมายคำพูดเดี่ยว
puts 'a\nb' # just print a\nb
puts "a\nb" # print a, then b at newline
'don\'t'
ยกเว้นสำหรับการหลบหนีราคาเดียวตัวเองเช่น
puts '\\'
มันจะพิมพ์สแลชเดียวเท่านั้น ดูที่นี่stackoverflow.com/questions/25499046/…
เพื่อตอบคำถามของคุณคุณต้องใช้""
เมื่อคุณต้องการทำการแก้ไขสตริง:
a = 2
puts "#{a}"
ใช้คำพูดง่ายๆ
นอกจากนี้หากคุณสงสัยว่ามีความแตกต่างในแง่ของประสิทธิภาพหรือไม่มีคำถามยอดเยี่ยมเกี่ยวกับเรื่องนี้ใน StackOverflow
และถ้าคุณยังใหม่กับ RoR ฉันขอให้คุณเลือกหนังสือ Ruby ที่เหมาะสมเพื่อเรียนรู้พื้นฐานของภาษา มันจะช่วยให้คุณเข้าใจในสิ่งที่คุณกำลังทำ ผมเองขอแนะนำสายดินดี Rubyist
มีความแตกต่างระหว่าง''
เครื่องหมายคำพูดเดี่ยวและคู่""
ใน Ruby ในแง่ของสิ่งที่จะได้รับการประเมินเป็นสตริง
เริ่มแรกฉันต้องการชี้แจงว่าในรูปแบบตัวอักษรของสตริงอะไรก็ตามที่อยู่ระหว่างเครื่องหมายคำพูดเดี่ยวหรือคู่ได้รับการประเมินว่าเป็นวัตถุสตริงซึ่งเป็นตัวอย่างของคลาส Ruby String
ดังนั้น'stackoverflow'
และ"stackoverflow"
ทั้งสองจะประเมินอินสแตนซ์ของคลาส String โดยไม่มีความแตกต่างเลย
ความแตกต่างที่สำคัญระหว่างรูปแบบตัวอักษรทั้งสองของสตริง (อัญประกาศเดี่ยวหรือคู่) คือเครื่องหมายอัญประกาศคู่อนุญาตให้ใช้สำหรับ escape sequences ขณะที่ single quote ไม่ได้!
สตริงตัวอักษรที่สร้างขึ้นโดยคำพูดเดียวไม่สนับสนุนการinterpollation สตริงและไม่หนีลำดับ
ตัวอย่างที่เรียบร้อยคือ:
"\n" # will be interpreted as a new line
แต่ทว่า
'\n' # will display the actual escape sequence to the user
การแก้ไขด้วยเครื่องหมายคำพูดเดี่ยวไม่ทำงานเลย:
'#{Time.now}'
=> "\#{Time.now}" # which is not what you want..
เนื่องจาก Ruby Linters ส่วนใหญ่แนะนำให้ใช้ตัวอักษรอัญประกาศเดี่ยวสำหรับสตริงของคุณและไปหา double double ในกรณีของลำดับการแก้ไข / การหลบหนี
สตริงที่ยกมาเดี่ยวไม่ประมวลผลรหัสหลบหนี ASCII (\ n, \ t ฯลฯ ) และพวกเขาจะไม่ทำการแก้ไขสตริงในขณะที่ทั้งสองอ้างถึงทำทั้งสองอย่าง
ตัวอย่างรหัส Escape:
2.4.0 :004 > puts 'Hello \n World'
Hello \n World
2.4.0 :005 > puts "Hello \n World"
Hello
World
ตัวอย่างการแก้ไข:
2.4.0 :008 > age=27
=> 27
2.4.0 :009 > puts 'Age: #{age}'
Age: #{age}
2.4.0 :009 > puts "Age: #{age}"
Age: 27
คล้ายกับคำตอบ "\ n" ในการพิมพ์ต่อไปนี้เป็นอีกกรณีหนึ่งของความแตกต่าง
puts "\1" -> get special character
puts '\1' -> get \1
ดังนั้นดูเหมือนว่า * ถูกแปลงเป็นอักขระที่หลีกเลี่ยงในเครื่องหมายคำพูดคู่ แต่ไม่อยู่ในเครื่องหมายคำพูดเดี่ยว BTW มันจะส่งผลกระทบต่อการส่งออกเมื่อใช้ในการแสดงออกปกติเช่น str.gsub (/ การแสดงออกปกติ /, '\ 1, \ 2')
อีกเหตุผลที่คุณต้องการใช้ single-quote คือเมื่อผ่านรูปแบบ regex เป็นสตริง:
รูปแบบ regex นี้จะทำงานได้เนื่องจากส่งผ่านภายในเครื่องหมายคำพูดเดี่ยว:
"123 ABC".match('\d')
=> #<MatchData "1">
รูปแบบ regex นี้จะล้มเหลวเนื่องจากส่งผ่านภายในเครื่องหมายคำพูดคู่ (คุณจะต้องหลีกเลี่ยงเพื่อให้มันทำงานได้):
"123 ABC".match("\d")
=> nil
ในกรณีเฉพาะนี้มันไม่ต่างกับวิธีที่คุณเขียน พวกเขาเทียบเท่า นอกจากนี้คุณอาจต้องการอ่านคำแนะนำ / บทแนะนำ Ruby เพิ่มเติมอีก :)