มีความแตกต่างระหว่างสัญกรณ์:key => "value"
(hashrocket) และkey: "value"
(Ruby 1.9) หรือไม่?
ถ้าไม่เช่นนั้นฉันต้องการใช้key: "value"
สัญกรณ์ มีอัญมณีที่ช่วยให้ผมที่จะแปลงจาก:x =>
การx:
จด?
มีความแตกต่างระหว่างสัญกรณ์:key => "value"
(hashrocket) และkey: "value"
(Ruby 1.9) หรือไม่?
ถ้าไม่เช่นนั้นฉันต้องการใช้key: "value"
สัญกรณ์ มีอัญมณีที่ช่วยให้ผมที่จะแปลงจาก:x =>
การx:
จด?
คำตอบ:
ใช่มีความแตกต่าง สิ่งเหล่านี้ถูกกฎหมาย:
h = { :$in => array }
h = { :'a.b' => 'c' }
h[:s] = 42
แต่สิ่งเหล่านี้ไม่ใช่:
h = { $in: array }
h = { 'a.b': 'c' } # but this is okay in Ruby2.2+
h[s:] = 42
คุณยังสามารถใช้อะไรก็ได้เป็นกุญแจ=>
เพื่อให้คุณทำสิ่งนี้ได้:
h = { C.new => 11 }
h = { 23 => 'pancakes house?' }
แต่คุณไม่สามารถทำได้:
h = { C.new: 11 }
h = { 23: 'pancakes house?' }
รูปแบบ JavaScript ( key: value
) จะมีประโยชน์ก็ต่อเมื่อปุ่ม Hash ทั้งหมดของคุณเป็นสัญลักษณ์ "ธรรมดา" (บางอย่างที่ตรงกันมากขึ้นหรือน้อยลง/\A[a-z_]\w*\z/i
AFAIK โปรแกรมแยกวิเคราะห์จะใช้รูปแบบป้ายกำกับสำหรับคีย์เหล่านี้)
:$in
สัญลักษณ์สไตล์แสดงยุติธรรมบิตเมื่อใช้ MongoDB ดังนั้นคุณจะจบลงด้วยการผสมรูปแบบแฮถ้าคุณใช้ MongoDB และหากคุณเคยทำงานกับคีย์เฉพาะของh[:k]
แฮช ( h = { ... }
) แทนที่จะใช้แฮชทั้งหมด ( ) คุณจะยังต้องใช้สไตล์โคลอนเป็นอันดับแรกสำหรับสัญลักษณ์ คุณจะต้องใช้สไตล์โคลอนนำหน้าสำหรับสัญลักษณ์ที่คุณใช้นอกแฮช ฉันชอบที่จะสอดคล้องกันดังนั้นฉันจึงไม่ต้องกังวลกับสไตล์ JavaScript เลย
ปัญหาบางอย่างเกี่ยวกับรูปแบบ JavaScript ได้รับการแก้ไขแล้วใน Ruby 2.2 ตอนนี้คุณสามารถใช้เครื่องหมายคำพูดได้หากคุณมีสัญลักษณ์ที่ไม่ใช่ป้ายกำกับที่ถูกต้องตัวอย่างเช่น:
h = { 'where is': 'pancakes house?', '$set': { a: 11 } }
แต่คุณยังต้องใช้แฮชร็อกเก็ตหากคีย์ของคุณไม่ใช่สัญลักษณ์
h[:s] = 42
ตัวอย่างนี้เกี่ยวข้องกับคำถามนี้ ในความคิดของฉันสไตล์ JavaScript เทียบกับสไตล์แฮชร็อคเกตนั้นเกี่ยวข้องกับการกำหนดคู่คีย์ / ค่าแฮชเท่านั้นและไม่เกี่ยวข้องกับการกำหนดองค์ประกอบแฮชด้วยคีย์ ดังนั้นh[s:] = 42
ตัวอย่างจึงดูเหมือนจะทำให้เข้าใจผิด
h[:s] = 42
สัญกรณ์เสมอ ไม่มีทางเลือกอื่น เมื่อคุณกำหนดคู่คีย์ / ค่าคุณจะมีตัวเลือกของ{ key: value }
สไตล์ JavaScript หรือ{ :key => value }
สไตล์แฮชร็อคเกต สถานการณ์การกำหนดประเด็นยังดูเหมือนจะไม่เกี่ยวข้องกับสิ่งที่อยู่ในโฟกัส
key: "value"
เป็นคุณสมบัติอำนวยความสะดวกของ Ruby 1.9; ตราบใดที่คุณรู้ว่าสภาพแวดล้อมของคุณจะรองรับฉันก็ไม่เห็นเหตุผลที่จะไม่ใช้มัน การพิมพ์โคลอนง่ายกว่าจรวดมากและฉันคิดว่ามันดูสะอาดกว่ามาก สำหรับการมีอัญมณีในการแปลงอาจจะไม่ใช่ แต่ดูเหมือนว่าจะเป็นประสบการณ์การเรียนรู้ที่ดีสำหรับคุณหากคุณยังไม่รู้จักการจัดการไฟล์และนิพจน์ทั่วไป
ทับทิมกัญชาคีย์ได้รับมอบหมายจากกัญชาจรวดสามารถอำนวยความสะดวกสำหรับสตริงคู่ค่าคีย์ ( เช่น . 's' => x
) ในขณะที่ได้รับมอบหมายที่สำคัญผ่านทางสัญลักษณ์ ( เช่น key: "value"
หรือ:key => "value"
) ไม่สามารถกำหนดกับสตริง แม้ว่าแฮชจรวดจะให้อิสระและการทำงานสำหรับตารางแฮชโดยเฉพาะการอนุญาตให้สตริงเป็นคีย์ประสิทธิภาพของแอปพลิเคชันอาจช้ากว่าที่ตารางแฮชจะถูกสร้างด้วยสัญลักษณ์เป็นแฮชคีย์ แหล่งข้อมูลต่อไปนี้อาจชี้แจงความแตกต่างระหว่างแฮชร็อกเก็ตและสัญลักษณ์:
การkey: value
กำหนดสไตล์ JSON เป็นส่วนหนึ่งของไวยากรณ์แฮช Ruby 1.9 ใหม่ดังนั้นโปรดทราบว่าไวยากรณ์นี้จะใช้ไม่ได้กับ Ruby เวอร์ชันเก่า นอกจากนี้ปุ่มจะเป็นสัญลักษณ์ หากคุณสามารถอยู่กับข้อ จำกัด ทั้งสองนี้แฮชใหม่จะทำงานเหมือนกับแฮชเก่า ไม่มีเหตุผลใด (นอกจากสไตล์) ที่จะแปลงพวกเขา
การทำ:key => value
ก็เหมือนกับการทำkey: value
และเป็นเพียงแค่ความสะดวกเท่านั้น ฉันไม่เคยเห็นภาษาอื่นที่ใช้=>
แต่ภาษาอื่น ๆ เช่น Javascript ใช้key: value
ในประเภทข้อมูลที่เทียบเท่ากับแฮช
สำหรับอัญมณีที่แปลงวิธีที่คุณเขียนแฮชของคุณฉันจะยึดตามวิธีที่คุณทำกับโครงการปัจจุบันของคุณ
* หมายเหตุว่าในการใช้key: value
ที่สำคัญจะเป็นสัญลักษณ์และการเข้าถึงค่าที่เก็บไว้ที่สำคัญที่อยู่ในกัญชาจะยังคงเป็นfoo
foo[:key]
=>
และใช้ ฉันเดาว่า Ruby ได้รับแรงบันดาลใจอย่างมากจาก Perl ยืมไวยากรณ์จาก Perl :)
h = { 'a.b': 'c' }
ตอนนี้ถูกกฎหมายสำหรับ Ruby 2.2.0 ดูbugs.ruby-lang.org/issues/4276