Expl3 komutu nasıl kullanılır \ str_case: nnF

Sep 18 2020

Birisi nasıl açıklayabilir misiniz xparse- expl3Komut \str_case:nnFbir örnekle eserleri? Burada mı strve caseönemli mi?

Lütfen uzun (metin) yanıtlardan kaçının. Sanırım temelleri açıklarsanız, istediğim yerde kullanabilirim.

Yanıtlar

5 PhelypeOleinik Sep 18 2020 at 18:35

Yapabildiğim kadar kısa:

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

Komut, sırayla <string>her <case n>dizeyle karşılaştırır ve bir eşleşme bulursa karşılık gelen <code n>çalıştırılır. Eşleşme bulunmazsa <false code>çalıştırılır.


Örnek: Eğer kullanıcı diyelim ki, bazı seçenekler geçtiği için bir makro olduğunu varsayalım above, centerya belowve seçilen seçeneğe bağlı bazı kod çalışır ve bir şey saçma yazıldığında eğer bir hata tutarsa:

\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} }
  }

daha sonra \cfg_test:n {center}çalışır <'center' code>ve \cfg_test: {wrong}bir hata oluşturur (bu bir kullanıcı arabirimi için olsaydı, l3keysonun yerine kullanılabilir).


Bir expl3 komut (değişkenler farklıdır) formun bir adına sahiptir:

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

<module>: O komut nereden geldiğini söylüyor strolduğunu expl3bunu biliyor, böylece 'ın string modülü \str_case:nnFdizeleri çalışır.

<name>: Komut gelmez Ne diyor casekullanılan expl3fonksiyonlar için bu davranmasına switch casediğer programlama dillerinde yapılara. expl3'ın \<whatever>_case:nn(TF)işlevleri her zaman yukarıdaki gibi aynı genel sözdizimine sahiptir: yalnızca gerçekleştirdikleri karşılaştırma türünü değiştirir. \int_case:nnFörneğin, aynı şeyi yapar ama tam sayıları karşılaştırır.

<signature>Kaç ve komut alır argümanlar ne tür söyler. nnormal {...}sınırlı bir argümandır ve File aynıdır n, ancak komut değerlendirilirse yürütülür false(şimdi ne Tanlama geldiğini tahmin edin ). Bir göz atın expl3.pdf: tüm olası imzaların ve çekirdeğin bir açıklamasını bulacaksınız <modules>. Ardından interface3.pdf, her expl3komutun ne yaptığının bir açıklamasını bulacağınız yere bir bakın .