「nil」を戻すにはどうすればよいですか?


18

私は誤って次を実行しました:

(unintern variable)

ここでvariableの値はnil

nilEmacsを再起動せずに戻るにはどうすればよいですか?


3
私をくすくすために+1。:-)卑劣な方法ではなく、「私もそれを完全にやった」方法で。
マラバルバ14年

@Malabarba :)自分がやったことを理解したとき、それは本当に謙虚な認識でした
ショーン・

1
nilを削除できます!それが来るのを見ませんでした。
ガンボ14年

@Gamboも私はしませんでした:)
ショーン・

回答:


19

(defconst nil ())

正しい効果があるようです。nilEmacs Lispでは、と空のリストは区別できないことに注意してください。

lread.c:4034どのようnilに作成されるかを確認しましたobarray

以下の3896行lread.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"); */

これは、なぜEmacsが(unintern nil)およびに対して保護しないのかを説明してい(unintern t)ます。


非常に賢い!私Stefはこれに同意します、実際には:)その道を進むと狂気にあります。
ショーンオールレッド14年

ブレー。ここでrms over smに同意します。インターン解除nilは、簡単に保護できる一般的なエラーです。なぜ人々がそれを飛び越えることができるのに階段に手すりを置くのですか?
ジル「SO-悪であるのをやめる」14年

@Gilles Cについて考えるとき、私はこれについて考えます。Cは、プログラマーが自分が何をしているかを知っており、単に自分を表現する方法を必要とするという哲学を維持しています。IMO、私たちはemacs lispをemacsのアセンブリ言語とみなすべきです。elispにコンパイルされる言語には、より高い抽象化(およびガード/機能)を追加する必要があります。しかし、それは確かに別の媒体のトピックです:)
ショーン・オールレッド14年

unintern頻繁には使用されません。メインでそれを使用することは、obarrayほとんど常に悪い考えです(2番目の引数を渡すことに失敗すると、バイトコンパイラーが文句をC-h f unintern言うので、2番目の引数が実際にまだオプションであることを伝えません)。
ステファン14年

@Stefanそれはドキュメントのバグのように見えるでしょう、それから:(
ショーン・
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.