ความแตกต่างของสตริงภายในอัญประกาศเดี่ยวหรือคู่ใน groovy คืออะไร?


97
def a = "a string"
def b = 'another'

มีความแตกต่างกันหรือไม่? หรือเหมือนกับ javascript เพื่อให้ป้อนข้อมูล'และ"ง่ายขึ้นในสตริง?

คำตอบ:


149

เครื่องหมายคำพูดเดี่ยวเป็นสตริงจาวามาตรฐาน

เครื่องหมายคำพูดคู่เป็นสตริงที่สามารถปรับเปลี่ยนได้ซึ่งจะส่งคืน GString หากเป็นเทมเพลตหรือไม่ก็เป็นสตริง Java มาตรฐาน ตัวอย่างเช่น:

println 'hi'.class.name    // prints java.lang.String
println "hi".class.name    // prints java.lang.String

def a = 'Freewind'
println "hi $a"            // prints "hi Freewind"
println "hi $a".class.name // prints org.codehaus.groovy.runtime.GStringImpl

หากคุณลองสร้างเทมเพลตด้วยสตริงที่ยกมาชุดเดียวจะไม่ทำอะไรเลยดังนั้น:

println 'hi $a'            // prints "hi $a"

นอกจากนี้ลิงก์ที่ให้โดย julkiewicz ในคำตอบก็คุ้มค่าที่จะอ่าน (โดยเฉพาะส่วนที่เกี่ยวกับ GStrings ไม่ใช่ Strings ประมาณ 2/3 ของทางลง


6
จุดดีเกี่ยวกับ GString ไม่ใช่ String สิ่งนี้จะกลายเป็นปัญหาเนื่องจากการเปรียบเทียบเท่ากับที่ล้มเหลวระหว่าง GString และ String แม้ว่าจะมีอักขระเหมือนกันก็ตาม นี่คือสิ่งที่คุณต้องเรียนรู้โดยเฉพาะอย่างยิ่งเมื่ออ้างอิงถึงคีย์ String / GString ในแผนที่
สตีเวน

19

ความเข้าใจของฉันคือสตริงที่ยกมาสองครั้งอาจมีการอ้างอิงแบบฝังไปยังตัวแปรและนิพจน์อื่น ๆ ตัวอย่างเช่น: "Hello $name", "Hello ${some-expression-here}". ในกรณีนี้GStringจะได้รับการ instantiated Stringแทนที่จะเป็นปกติ ในทางกลับกันสตริงที่ยกมาเดี่ยวไม่รองรับไวยากรณ์นี้และส่งผลให้เป็นแบบธรรมดาStringเสมอ เพิ่มเติมเกี่ยวกับหัวข้อที่นี่:

http://docs.groovy-lang.org/latest/html/documentation/index.html#all-strings

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