Ya, interpolasi string adalah istilah yang tepat untuk digunakan. Ini adalah variasi pada subjek kutip / makro, di mana string dihasilkan menggunakan templat.
wvxvw
1
Itu pertanyaan yang bagus. Pertimbangkan untuk meminta formatindikator untuk ini (gunakan M-x report-emacs-buguntuk itu). Kita semua sudah terbiasa menggunakan concatini, kadang-kadang dalam kombinasi dengan format(untuk konversi lain). Atau memberikan argumen formatseperti (if something "foobar" ""), sesuai dengan formatindikator "%s".
Drew
2
FYI - Saya baru saja mengajukan permintaan peningkatan seperti itu (# 19975), jadi Anda tidak perlu melakukannya. (Seharusnya sudah dilakukan bertahun-tahun yang lalu.)
Drew
1
Kedengarannya seperti cara yang cukup meragukan untuk membangun regexp (mungkin pertimbangkan untuk menggunakan rxmakro dalam skenario seperti itu. Minimal pastikan Anda menggunakan yang regexp-quotesesuai), tetapi selain itu jika Anda memiliki sejumlah besar string-mungkin dalam DAFTAR Anda bisa selalu melakukan sesuatu seperti (apply 'format "%s%s%s%s" (mapcar (lambda (x) (or x "")) LIST)). Tentu saja jika string format Anda benar-benar seperti "%s%s%s", maka concatmemang lebih masuk akal.
phils
Jawaban:
8
Tergantung pada aplikasi Anda, concatmungkin bisa digunakan:
(concat "live long " nil "and prosper")
;; => "live long and prosper"
Ini berfungsi karena concat bertindak berdasarkan urutan, dan nihil adalah daftar kosong.
Bentuk khusus orberguna di sini. Makro ini mengembalikan nilai argumen pertama, kecuali nil dalam hal ini mengembalikan argumen kedua. Jadi, dengan asumsi variabel yang ingin Anda periksa adalah foo, berikut ini akan melakukan apa yang Anda inginkan:
(format "%s.el" (or foo ""))
Dalam beberapa hal, ini lebih baik daripada tag ajaib karena memperjelas nilai apa yang harus dikembalikan jika argumennya nol.
Cukup adil. Poin penting di sini adalah bahwa itu bukan fungsi (yaitu hubungan arus pendek). Contoh saya cukup sime sehingga tidak akan membuat perbedaan, tetapi jika argumen kedua memiliki efek samping, itu berbeda.
interpolation
tag.format
indikator untuk ini (gunakanM-x report-emacs-bug
untuk itu). Kita semua sudah terbiasa menggunakanconcat
ini, kadang-kadang dalam kombinasi denganformat
(untuk konversi lain). Atau memberikan argumenformat
seperti(if something "foobar" "")
, sesuai denganformat
indikator"%s"
.rx
makro dalam skenario seperti itu. Minimal pastikan Anda menggunakan yangregexp-quote
sesuai), tetapi selain itu jika Anda memiliki sejumlah besar string-mungkin dalam DAFTAR Anda bisa selalu melakukan sesuatu seperti(apply 'format "%s%s%s%s" (mapcar (lambda (x) (or x "")) LIST))
. Tentu saja jika string format Anda benar-benar seperti"%s%s%s"
, makaconcat
memang lebih masuk akal.Jawaban:
Tergantung pada aplikasi Anda,
concat
mungkin bisa digunakan:Ini berfungsi karena concat bertindak berdasarkan urutan, dan nihil adalah daftar kosong.
sumber
Bentuk khusus
or
berguna di sini. Makro ini mengembalikan nilai argumen pertama, kecuali nil dalam hal ini mengembalikan argumen kedua. Jadi, dengan asumsi variabel yang ingin Anda periksa adalahfoo
, berikut ini akan melakukan apa yang Anda inginkan:Dalam beberapa hal, ini lebih baik daripada tag ajaib karena memperjelas nilai apa yang harus dikembalikan jika argumennya nol.
sumber