Setiap perintah adalah fungsi, tetapi tidak setiap fungsi juga merupakan perintah. 1
Perintah termasuk panggilan ke interactive
; inilah sebabnya perintah biasanya disebut sebagai "fungsi interaktif". Perintah dapat dipanggil melalui M-x name-of-command
RET, dan mereka juga dapat terikat pada urutan kunci. Fungsi reguler tidak termasuk panggilan ke interactive
, tidak bisa dipanggil menggunakan M-x, dan Anda tidak dapat mengikatnya ke urutan tombol. Untuk menjalankan fungsi yang tidak interaktif, Anda dapat menekan M-:( eval-expression
), masukkan nama fungsi yang diikuti oleh nilai untuk setiap argumen yang perlu dilampirkan dalam tanda kurung, dan tekan RET:
M-: (name-of-function arg1 arg2 arg3)
RET
Jika fungsi ini tidak seharusnya beroperasi pada buffer saat ini, Anda juga bisa masuk
(name-of-function arg1 arg2 arg3)
di *scratch*
buffer dan tekan C-x C-e( eval-last-sexp
) dengan titik diposisikan setelah tanda kurung tutup.
Untuk membuat fungsi bar
tersedia sebagai perintah, Anda dapat membungkusnya dengan fungsi interaktif khusus ( foo
) sebagai berikut:
(defun foo ()
(interactive)
(bar))
Tentu saja, jika bar
mengambil satu atau lebih argumen, Anda harus menyediakannya untuk membuat foo
pekerjaan dengan benar.
Jika Anda melihat orang menggunakan istilah "fungsi" dan "perintah" secara bergantian, ini mungkin menunjukkan (tergantung pada konteks) bahwa mereka tidak menyadari perbedaan antara konsep-konsep yang mendasarinya.
1 Perhatikan bahwa saya sedang berbicara tentang defun
di sini. Seperti @Stefan tunjukkan dalam komentar, makro keyboard adalah kasus khusus: Mereka dapat dianggap sebagai perintah , tetapi mereka bukan fungsi.
C-h i
, pilih manual Elisp ,i command
- menempatkan Anda tepat di simpulWhat is a function?
, yang membuat semua ini sangat jelas. Bantu pengguna belajar bertanya pada Emacs. (Hanya satu pendapat.)