แบ็กสแลช“ \” ตัวละครยกเว้นหลบหนีอะไรจริง ๆ ?


13

แบ็กสแลชอะไรที่หลบหนีจริงๆ?

มันใช้เป็นตัวละครที่หลบหนี แต่ฉันมักจะสงสัยว่ามีอะไรหลบหนีหรือสิ่งที่ถูกหลบหนีจาก

ฉันรู้ว่า "\ n" กำหนดบรรทัดใหม่ แต่การหลบหนีมาจากไหน ทำไมถึงเรียกว่า


15
มันกำลังหนีความพิโรธของฉันเมื่อมันกัดสายของฉัน
Joel Etherton

คำตอบ:


37

แบ็กสแลชใช้เป็นตัวทำเครื่องหมายเพื่อบอกคอมไพเลอร์ / ล่ามว่าอักขระต่อไปมีความหมายพิเศษบางอย่าง อักขระตัวถัดไปหมายถึงอะไรขึ้นอยู่กับการนำไปใช้งาน ตัวอย่างเช่นภาษารูปแบบ C ใช้ \ n เพื่อหมายถึงการขึ้นบรรทัดใหม่และ \ t เพื่อหมายถึงแท็บ

การใช้คำว่า "หลบหนี" จริงๆแล้วหมายถึงการหลบหนีออกจากการแยกวิเคราะห์ข้อความชั่วคราวและเข้าสู่โหมดอื่นที่อักขระตัวต่อมาได้รับการปฏิบัติแตกต่างกัน


8
เครื่องหมายทับขวาอาจบอกคอมไพเลอร์ / ล่ามว่าอักขระต่อไปนี้ไม่มีความหมายพิเศษทั้งนี้ขึ้นอยู่กับอักขระ ตัวอย่างเช่นเมื่อหนีเครื่องหมายคำพูด
Ryan Kinal

12
หรือหลบหนีเอง
Malfist

12

:))

มันเป็นคำที่เกี่ยวข้องกับลำดับการหลบหนีและคีย์Esc (ยกเว้น)

ตัวละครนั้นไม่ได้ "วิ่งหนี" ไปจากตัวละครอื่น ๆ บางคนอาจพูดว่าตัวละครที่ตามตัวละครหนี (พูดว่า\ nจากตัวอย่างของคุณ) หนีชะตากรรมของการถูกใช้เป็นสามัญnในบางแอปพลิเคชันและใช้แทนเป็นบรรทัดใหม่


3

Escape sequences นั้นเหมือนกันมากกับแนวคิดของการสื่อสารนอกวง :

บางครั้งก็ใช้เพื่ออธิบายสิ่งที่คนสื่อสารเรียกตัวละครกะเช่น ESC ที่นำไปสู่ลำดับการควบคุมสำหรับเทอร์มินัลจำนวนมากหรือตัวชี้วัดระดับการเปลี่ยนแปลงในรหัส Baudot 5 บิตแบบเก่า

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

  • คุณจะรู้ได้อย่างไรว่าจุดสิ้นสุดของกระแสนั้นอยู่ที่ใด
  • แบบแผนบางอย่างใช้ ASCII NUL (ศูนย์) เพื่อยกเลิกเช่นสตริงในบางภาษา แต่คุณไม่สามารถมีอักขระนั้นในไฟล์ได้ ไม่อนุญาตในการตั้งค่าบางอย่างเช่นการถ่ายโอนไฟล์ ศูนย์อาจเป็นอักขระที่ถูกต้อง
  • คุณสามารถส่งความยาวไฟล์ที่คาดไว้ก่อนได้ แต่ถ้าคุณต้องการยกเลิก

ผู้คนมากมายตลอดประวัติศาสตร์การคำนวณได้ใช้วิธีการต่าง ๆ มากมายเพื่อแก้ไขปัญหานี้

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


3

มันหลบหนีจากบริบทแยกที่มีความต้องการ (สิ่งที่คนร้าย) nที่จะตีความได้ว่าแทนที่จะเป็นnnewline

ความแตกต่างที่น่าสนใจที่สุดเกี่ยวกับเรื่องนี้ก็คือการหลบหนีไม่ได้เปลี่ยนบริบทการแยกวิธีที่อักขระอ้าง"(หรือสัญลักษณ์อื่น ๆ อีกมากมาย) จะทำต้องมีอีก"(หรือสัญลักษณ์อื่น ๆ ) เพื่อกลับไปที่บริบทเดิม พวกเขาแค่หันเหความสนใจเล็กน้อย แต่กลับมาบนถนนโดยเร็ว

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

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