'nil'을 어떻게 되 찾을 수 있습니까?


18

실수로 다음을 실행했습니다.

(unintern variable)

variable의 가치는 어디에 있었습니다 nil.

nilEmacs를 다시 시작하지 않고 어떻게 되나요?


3
나를 괴롭히는 +1. :-) 엉뚱한 방식이 아니라 "전혀 그렇게했을 것입니다".
Malabarba

@Malabarba :) 내가 한 일을 알아 냈을 때 그것은 진정으로 겸손한 실현이었습니다
Sean Allred

1
nil을 삭제할 수 있습니다! 오는 것을 보지 못했습니다.
Gambo

@Gambo 어느 쪽도 나도 :)
Sean Allred

답변:


19

(defconst nil ())

올바른 효과가있는 것 같습니다. 그 노트 nil와 빈리스트 이맥스 리스프에서 구별 할 수 있습니다.

에서 lread.c:4034어떻게 nil생성 되는지 확인 했습니다 obarray.

라인 3896lread.c 의 주석을 참고하십시오 .

/* There are plenty of other symbols which will screw up the Emacs
     session if we unintern them, as well as even more ways to use
     `setq' or `fset' or whatnot to make the Emacs session
     unusable.  Let's not go down this silly road.  --Stef  */
  /* if (EQ (tem, Qnil) || EQ (tem, Qt))
       error ("Attempt to unintern t or nil"); */

이것은 왜 이맥스가 (unintern nil)와 에 대해 보호하지 않는지를 설명합니다 (unintern t).


매우 영리한! 나는 이것에 동의합니다 Stef. 실제로 :) 그 길에는 광기가 있습니다.
Sean Allred

블리. 나는 여기서 sm을 통한 rms에 동의합니다. 비인 터닝 nil은 보호하기 쉬운 일반적인 오류입니다. 사람들이 계단을 뛰어 넘을 수 있는데 왜 난간을 계단에 올려 놓아야합니까?
Gilles 'SO- 악마 그만해

@Gilles 저는 C에 대해 생각할 때 이것에 대해 생각합니다. C는 프로그래머가 자신이하는 일을 알고 있으며 자신을 표현할 방법이 필요하다는 철학을 유지합니다. IMO, 우리는 emacs lisp를 emacs의 어셈블리 언어로 간주해야합니다. 더 높은 추상화 (및 가드 / 기능)는 컴파일 할 수있는 언어로 추가해야합니다. 그러나 그것은 확실히 다른 매체에 대한 주제입니다 :)
Sean Allred

unintern실제로 자주 사용되지는 않습니다. 메인에서 그것을 사용하는 obarray것은 항상 나쁜 생각입니다 (따라서 바이트 컴파일러가 두 번째 인수를 전달하지 못하면 불평 C-h f unintern하고 두 번째 인수가 여전히 선택적이라는 것을 알려주지 않습니다).
Stefan

@Stefan 그것은 문서화 버그 인 것처럼 보일 것입니다 :(
Sean Allred
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.