Как вызвать интерактивный elisp интерпретатор в Emacs?

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

38
задан Bleeding Fingers 14 June 2013 в 11:17
поделиться

6 ответов

Легко оценить выражения Lisp в Нижнем Режиме Emacs-Lisp:

M-x ielm

можно читать больше об этой функции в раздел руководства Emacs по "Взаимодействию Lisp"

60
ответ дан Greg Mattes 27 November 2019 в 03:22
поделиться

Ваш лучший выбор эти *scratch* буфер. Можно сделать его больше как REPL первым включением отладчика:

M-x set-variable debug-on-error t

Тогда использование C-j вместо C-x C-e, который вставит результат оценки выражения в буфер на строке после выражения. Вместо вещей как история команд, * * * и т.д, Вы просто перемещаетесь эти *scratch* буфер и редактирование.

, Если Вы хотите, чтобы вещи как * * * работали, больше как обычный REPL, попытка ielm.

M-x ielm
8
ответ дан jfm3 27 November 2019 в 03:22
поделиться

В эти *scratch* буфер, просто введите C-j для оценки выражения перед точкой.

1
ответ дан cjm 27 November 2019 в 03:22
поделиться

Ну, если Вы действительно интересуетесь литеральным REPL для emacs, возможно записать то с помощью - пакетный режим emacs:

(require 'cl)

(defun read-expression ()
  (condition-case
      err
      (read-string "> ")
    (error
     (message "Error reading '%s'" form)
     (message (format "%s" err)))))

(defun read-expression-from-string (str)
  (condition-case
      err
      (read-from-string str)
    (error
     (message "Error parsing '%s'" str)
     (message (format "%s" err))
     nil)))

(defun repl ()
  (loop for expr = (read-string "> ") then (read-expression)
        do
        (let ((form (car (read-expression-from-string expr))))
          (condition-case
              err
              (message " => %s" (eval form))
            (error
             (message "Error evaluating '%s'" form)
             (message (format "%s" err)))))))

(repl)

можно назвать это из командной строки, или, поскольку Вы, кажется, хотите из буфера emacs выполнение оболочки:

kburton@hypothesis:~/projects/elisp$ emacs -batch -l test.el
Loading 00debian-vars...
> (defvar x '(lambda (y) (* y 100)))
 => x
> (funcall x 0.25)
 => 25.0
> 
kburton@hypothesis:~/projects/elisp$
1
ответ дан Kyle Burton 27 November 2019 в 03:22
поделиться

Для выполнения всего одного elisp выражения, можно использовать M-: ярлык и вводит выражение в мини-буфер. Для других случаев можно использовать царапина буфер

1
ответ дан Alex Ott 27 November 2019 в 03:22
поделиться

ESHELL - еще один вариант для интерактивного интерпретатора ELISP.

M-x eshell

Это не только командная оболочка, такая как Bash (или cmd.exe, если в Windows), но вы также можете интерактивно написать и выполнять ELISP код.

~ $ ls
foo.txt
bar.txt
~ $ (+ 1 1)
2
15
ответ дан 27 November 2019 в 03:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: