Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

การคัดเลือกนักแสดงที่ชัดเจนกับการบีบบังคับโดยนัยใน Ruby:#to_s กับ #to_str อธิบาย

การบังคับประเภทคือการเปลี่ยนประเภทของวัตถุไปเป็นประเภทอื่นพร้อมกับค่าของมัน ตัวอย่างเช่น การเปลี่ยนจำนวนเต็มเป็นสตริงด้วย 00 หรือลอยเป็นจำนวนเต็มด้วย 12 . 29 ที่อาจจะไม่ค่อยมีใครรู้จัก และ 32 วิธีที่ออบเจ็กต์บางตัวนำไปใช้นั้นทำเหมือนกันตั้งแต่แรกเห็น แต่มีความแตกต่างบางประการ

ใน AppSignal Academy ฉบับนี้ เราจะเจาะลึกถึงการคัดเลือกนักแสดงอย่างชัดเจนและการบังคับใช้ประเภทต่างๆ ใน Ruby ในขณะที่บรรยายสรุปเกี่ยวกับนักแสดงประเภทการพิมพ์ เราจะพูดถึงความแตกต่างระหว่างทั้งสองวิธี และอภิปรายถึงวิธีใช้งาน

ก่อนอื่น มาดูกันว่าโดยปกติแล้วเราบังคับค่าประเภทต่างๆ ใน Ruby ด้วยตัวช่วยแคสต์ที่ชัดเจนอย่างไร

ตัวช่วยแคสต์ที่ชัดเจน

ตัวช่วยในการแคสต์ที่พบบ่อยที่สุดคือ 40 , 50 , 65 และ 73 . นี่เป็นวิธีการหล่อที่ชัดเจน ช่วยให้เราแปลงค่าจากประเภทหนึ่งไปอีกประเภทหนึ่งได้อย่างง่ายดาย

ผู้ช่วยเหลือที่ชัดเจนมาพร้อมกับคำมั่นสัญญาที่ชัดเจน เมื่อใดก็ตามที่ 82 ถูกเรียกบนวัตถุ มันจะ เสมอ ส่งคืนสตริงแม้ว่าวัตถุจะแปลงเป็นสตริงได้ไม่ดีก็ตาม มันเหมือนกับการคัดเลือก Michael Keaton เป็น Batman คุณจะได้แบทแมน แม้ว่านักแสดงตลกจะไม่เหมาะกับบทนี้เป็นพิเศษก็ตาม

Ruby นำเสนอวิธีการช่วยเหลือเหล่านี้ในเกือบทุกวัตถุพื้นฐานในไลบรารีมาตรฐาน Ruby

 

วิธีการเหล่านี้ โดยเฉพาะ 91 ถูกนำไปใช้กับประเภทพื้นฐานส่วนใหญ่ใน Ruby แม้ว่าการแคสต์จะส่งคืนค่ากลับมาเกือบทุกครั้ง แต่ผลลัพธ์อาจไม่เป็นอย่างที่เราคาดหวัง

 

กำลังเรียก 105 , 114 , 129 และ 133 ตัวช่วยบังคับค่าใดๆ ให้เป็นประเภทที่เลือก โดยส่งคืนการแสดงประเภทที่ถูกบังคับ โดยไม่คำนึงว่าจะเกิดอะไรขึ้นกับค่านั้น

วิธีการบังคับโดยนัย

การเรียกวิธีการส่งประเภทกับค่าที่ไม่ทำหน้าที่เหมือนกับประเภทที่เรากำลังส่งไปอาจทำให้เกิดข้อผิดพลาดหรือสูญเสียข้อมูลได้ Ruby ยังมีวิธีการบีบบังคับโดยนัยซึ่งจะคืนค่าเฉพาะเมื่อวัตถุทำหน้าที่เหมือนชนิดเท่านั้น วิธีนี้ทำให้เรามั่นใจได้ว่าค่าจะทำหน้าที่เหมือนกับประเภทที่เราต้องการ วิธีการบังคับโดยนัยเหล่านี้คือ 148 , 159 , 168 และ 170 .

การบังคับขู่เข็ญโดยปริยายก็เหมือนกับการเลือกลีโอนาร์ด นิมอยเป็นบทบาทอื่นๆ ยกเว้นสป็อค พวกเขาจะได้ผลหากตัวละครอยู่ใกล้สป็อคมากพอ แต่จะล้มเหลวหากไม่ได้อยู่ใกล้ 181 ผู้ช่วย พยายาม เพื่อแปลงเป็นสตริง แต่จะเพิ่ม 194 หากวัตถุไม่ได้ใช้วิธีการและไม่สามารถถูกบังคับโดยปริยายได้

 

เราจะเห็นได้ว่า Ruby มีความเข้มงวดมากขึ้นเล็กน้อยในตอนนี้ในสิ่งที่ทำ และไม่ได้บังคับประเภทที่ร้องขอ หากไม่สามารถบังคับได้ ให้ระบุ 208 วิธีการไม่ได้ถูกนำมาใช้กับวัตถุและการเรียกมันทำให้เกิด 218 .

เมื่อใช้การบังคับโดยปริยาย เช่น 220 เราขอให้ฟังก์ชันส่งคืนออบเจ็กต์ String เฉพาะในกรณีที่ประเภทดั้งเดิมทำหน้าที่เหมือน String ด้วย ด้วยเหตุนี้ 232 ใช้งานเฉพาะกับ String ใน Ruby Standard Library เท่านั้น

วิธีที่ Ruby ใช้การบังคับโดยนัย

นอกจากจะแม่นยำมากขึ้นในสิ่งที่เราขอระหว่างการบังคับขู่เข็ญแล้ว การบังคับโดยนัยยังมีประโยชน์อะไรอีกบ้าง? ปรากฎว่า Ruby ใช้การบังคับโดยนัยในสถานการณ์ที่ค่อนข้างยุติธรรม ตัวอย่างเช่น เมื่อรวมวัตถุเข้ากับ 241 .

 

ที่นี่ เราเห็น Ruby เพิ่ม 256 เนื่องจากไม่สามารถทำการแปลงโดยนัยจาก 269 ได้ พิมพ์เป็น 273 .

หากเราใช้ 287 ในชั้นเรียน Ruby รู้วิธีบังคับ 291 ประเภท.

 

เช่นเดียวกับ Arrays และ 300 .

 

แต่ 318 ถูกใช้ในสถานการณ์ต่างๆ มากขึ้น เราสามารถใช้เพื่อทำลายโครงสร้าง Array ให้เป็นตัวแปรที่แยกจากกัน

 

นอกจากนี้ยังทำการแปลงวัตถุให้เป็นพารามิเตอร์บล็อกด้วย

 

มีสถานการณ์หลายกรณีที่ใช้วิธีการบังคับโดยนัย เช่น 324 ด้วย 335 . วิธีนี้จะบังคับค่าเป็นแฮชด้วย 345 ก่อนที่จะส่งต่อไปยัง 355 วิธีการ.

 

ประเภทการบังคับใช้

Ruby ยังเสนอวิธีการบังคับที่มีความยืดหยุ่นมากขึ้นเมื่อประเภทนั้นเป็นประเภทที่ไม่รู้จัก และเราต้องการให้แน่ใจว่าเราได้ประเภทที่ถูกต้อง มีหนึ่งรายการสำหรับทุกประเภทพื้นฐาน (366 , 373 , 382 , 393 , 409 ฯลฯ)

 

412 วิธีแรกพยายามโทร 421 กับค่า และเมื่อล้มเหลว ระบบจะเรียกมันว่า 435 วิธีการ ไม่ใช่ทุกวัตถุที่กำหนด 445 วิธีการจึงตรวจสอบทั้งการบังคับโดยนัย (456 ) และชัดเจน (464 ) วิธีการส่งจะเพิ่มโอกาสที่การแปลงสตริงจะทำงานและคุณจะได้รับค่าที่คุณต้องการ โดยการเรียกร้องการบังคับโดยนัยในครั้งแรก เรามีแนวโน้มที่จะได้รับผลลัพธ์ที่มีค่าเท่ากัน แต่เป็นประเภทการบังคับ และไม่ใช่สิ่งที่คล้ายกับ 479 .

 

คุณควรใช้วิธีการส่งโดยนัยสำหรับวัตถุที่ทำหน้าที่เหมือนประเภทที่จะถูกบังคับให้บังคับเท่านั้น เช่น 482 สำหรับคลาส String ของคุณเอง

นอกเหนือจากการพยายามบังคับโดยปริยายครั้งแรก 490 ตัวช่วยก็ตรวจสอบแบบที่ส่งคืนด้วย 507 เป็นเพียงวิธีการที่สามารถส่งคืนค่าประเภทใดก็ได้ แม้จะไม่ใช่สตริงก็ตาม เพื่อให้แน่ใจว่าเราได้รับค่าประเภทที่ร้องขอ 514 เพิ่ม 524 หากประเภทไม่ตรงกัน

 

ที่นี่เราจะเห็นได้ว่า Ruby ละเว้นผลลัพธ์ของ 538 เพราะมันส่งคืน 544 ซึ่งไม่ใช่ประเภท String แต่จะกลับไปเป็น 555 แทน ผลลัพธ์

ถ้า 567 ส่งคืน 579 ด้วย และไม่ใช่ประเภทที่ถูกต้อง 583 จะเพิ่ม 596 .

 

แม้ว่าอาจมีความน่าเชื่อถือมากกว่าในการบังคับใช้ประเภทการบังคับ แต่โปรดทราบว่าวิธีการช่วยเหลือการคัดเลือก (604 , 611 ฯลฯ) มักจะช้ากว่าเล็กน้อยเนื่องจากจำเป็นต้องตรวจสอบค่าที่กำหนดเพิ่มเติม

โดยสรุป

เมื่อคุณต้องการให้แน่ใจว่าคุณกำลังจัดการกับข้อมูลประเภทที่ถูกต้องสำหรับออบเจ็กต์ การบังคับประเภทถือเป็นกระบวนการที่มีประโยชน์ ในโพสต์นี้ เราได้รีเฟรชความรู้ของเราเกี่ยวกับตัวช่วยในการแคสต์ที่ชัดเจน เช่น 626 , 630 , 640 และ 656 . นอกจากนี้เรายังดูกรณีที่ผู้ช่วยเหลือโดยนัยเช่น 662 , 675 , 683 และ 693 มีประโยชน์และวิธีใช้งานโดย Ruby เอง

เราหวังว่าคุณจะพบว่าภาพรวมของการบังคับประเภทนี้มีประโยชน์ และวิธีที่คุณพบว่าการเปรียบเทียบการพิมพ์ของนักแสดง และเช่นเคย โปรดแจ้งให้เราทราบหากมีหัวข้อที่คุณต้องการให้เรากล่าวถึง หากคุณมีคำถามหรือความคิดเห็น อย่าลังเลที่จะส่งอีเมลหาเราที่ @AppSignal

การคัดเลือกนักแสดงที่ชัดเจนกับการบีบบังคับโดยนัยใน Ruby:#to_s กับ #to_str อธิบาย

ทอม เดอ บรุยน์