Saya sering harus membuat beberapa substitusi dari string yang sama:
(format "%s %s %s" "a" "a" "a") ;; gives: "a a a"
(Ini hanya contoh tiruan, dalam hal ini lebih baik merekatkan "a" dengan spasi putih, tetapi secara umum saya berurusan dengan situasi yang lebih rumit)
Apakah ada cara untuk membuat pengganti bernama? Sebagai contoh dalam python orang akan menulis:
"{0} {0} {0}".format("a") # or:
"{name} {name} {name}".format(name="a")
Jawaban:
Menulis ulang jawaban ini memberikan solusi lain:
Sunting :
format-spec
Solusi lainSeperti Malabarba memberikan solusi lain dalam komentar:
Sunting 2 : Evaluasi sebelum penggantian:
Berikut adalah contoh dengan evaluasi sebelum penggantian:
sumber
format-spec-make
ini hanya daftar lagu:'((?a . "a") (?b . "b"))
Pustaka manipulasi string milik Magnar Sveen s.el menyediakan berbagai cara untuk melakukan ini. Sebagai contoh:
Perhatikan bahwa
s-format
dapat mengambil fungsi pengganti, tetapi memberikan penanganan khusus untukaget
,elt
, dangethash
. Jadi Anda bisa menggunakan daftar token dan merujuknya berdasarkan indeks, seperti:Anda juga dapat mengganti menggunakan variabel dalam-lingkup, seperti ini:
sumber
s-lex-format s.el benar-benar seperti yang Anda inginkan, tetapi jika Anda ingin benar-benar dapat menempatkan kode di dalam blok substitusi dan bukan hanya nama variabel, saya menulis ini sebagai bukti konsep.
Anda bahkan dapat menyematkan
fmt
panggilan di dalam yang lainfmt
jika Anda gilaKode hanya mengembang ke
format
panggilan sehingga semua pergantian dilakukan secara berurutan dan dievaluasi pada saat dijalankan.Perbaikan dapat dilakukan dengan jenis format apa yang digunakan daripada selalu menggunakan% s, tapi itu harus dilakukan saat runtime dan akan menambah overhead tetapi bisa dilakukan dengan mengelilingi semua format args dalam pemanggilan fungsi yang memformat dengan baik hal-hal berdasarkan pada jenis tetapi sebenarnya satu-satunya skenario di mana Anda ingin yang mungkin mengapung dan Anda bahkan bisa melakukan (format "% f" float) di substitusi adalah Anda putus asa.
Jika saya mengerjakannya lebih banyak, saya lebih cenderung memperbarui inti ini daripada jawaban ini. https://gist.github.com/jordonbiondo/c4e22b4289be130bc59b
sumber
Bukan tujuan umum, tetapi akan menyelesaikan kasus Anda:
Menggunakan contoh yang disediakan:
memberi:
sumber
" * - :raw-html:`<img width=\"100%%\" src=\"http://xxx.xxx/images/languages/staff/%s.jpg\" alt=\"%s.jpg\"/>` - .. _%s:"
- semuanya%s
sama.