วิธีใช้คำสั่ง Expl3 \ str_case: nnF

Sep 18 2020

ใครช่วยกรุณาอธิบายวิธีการxparse- expl3คำสั่ง\str_case:nnFการทำงานโดยตัวอย่าง? อยู่ที่นี่strและcaseสำคัญไหม

โปรดหลีกเลี่ยงคำตอบที่ยาว (ข้อความ) ฉันคิดว่าถ้าคุณอธิบายพื้นฐานฉันสามารถใช้ได้ทุกที่ที่ฉันต้องการ

คำตอบ

5 PhelypeOleinik Sep 18 2020 at 18:35

สั้นที่สุดเท่าที่จะทำได้:

\str_case:nnF { <string> }
  {
    { <case 1> } { <code 1> }
    { <case 2> } { <code 2> }
    ...
    { <case n> } { <code n> }
  }
  { <false code> }

คำสั่งจะเปรียบเทียบ<string>กับแต่ละ<case n>สตริงตามลำดับและหากพบว่าตรงกันคำสั่งนั้นจะ<code n>ถูกดำเนินการ หากไม่พบรายการที่ตรงกันจะ<false code>ถูกดำเนินการ


ตัวอย่าง: สมมติว่าคุณมีแมโครที่ผู้ใช้ผ่านบางตัวเลือกการพูดabove, centerหรือbelow, และมันจะทำงานโค้ดบางส่วนขึ้นอยู่กับตัวเลือกในการเลือกและยกข้อผิดพลาดหากสิ่งที่ไร้สาระพิมพ์:

\cs_new_protected:Npn \cfg_test:n #1
  {
    \str_case:nnF {#1}
      {
        { above  } { <'above' code> }
        { center } { <'center' code> }
        { below  } { <'below' code> }
      }
      { \msg_error:nn { cfg } { invalid-option } {#1} }
  }

จากนั้น\cfg_test:n {center}จะทำงาน<'center' code>และ\cfg_test: {wrong}จะเพิ่มข้อผิดพลาด (แม้ว่าจะใช้สำหรับอินเทอร์เฟซผู้ใช้l3keysสามารถใช้แทนได้)


expl3 คำสั่ง (ตัวแปรที่แตกต่างกัน) มีชื่อของรูปแบบ:

\<module>_<name>:<signature>

<module>กล่าวว่าที่คำสั่งที่เป็นจาก: strเป็นexpl3's โมดูลสตริงเพื่อให้คุณทราบว่า\str_case:nnFดำเนินการในสาย

<name>กล่าวว่าสิ่งที่คำสั่งไม่: caseจะใช้ในexpl3การทำงานที่ประพฤติเป็นswitch caseโครงสร้างในการเขียนโปรแกรมภาษาอื่น ๆ ฟังก์ชันexpl3ของ\<whatever>_case:nn(TF)ฟังก์ชันจะมีไวยากรณ์ทั่วไปเหมือนกับข้างต้นเสมอโดยจะเปลี่ยนเฉพาะประเภทของการเปรียบเทียบเท่านั้น \int_case:nnFเช่นเดียวกัน แต่เปรียบเทียบจำนวนเต็ม

<signature>จะบอกคุณว่าจำนวนมากและสิ่งที่ประเภทของข้อโต้แย้งคำสั่งยิง nเป็น{...}อาร์กิวเมนต์ปกติ - จำกัด และFเหมือนกับnแต่จะดำเนินการหากคำสั่งประเมินเป็นfalse(ตอนนี้เดาว่าTหมายถึงอะไร) ลองดูที่expl3.pdf: <modules>คุณจะพบรายละเอียดของลายเซ็นไปได้ทั้งหมดและเคอร์เนล จากนั้นดูที่interface3.pdfซึ่งคุณจะพบคำอธิบายว่าทุกexpl3คำสั่งทำอะไร