So wählen Sie beim Einstellen von Variablen oder beim Aktivieren von Modi zwischen Null und 0 oder t und 1 aus


19

Ich verstehe , dass nil, 0und / oder -1für das Deaktivieren einiger Funktionen verwendet und t, 1und / oder +1zum Ermöglichen einiger Funktionen verwendet. Welche Option sollte ich beim Zuweisen von Variablen oder Aktivieren / Deaktivieren von Nebenmodi auswählen?

Ich habe all diese Variationen an der einen oder anderen Stelle gesehen. Ich frage mich, ob es tatsächlich einen Unterschied zwischen ihnen gibt. Ich habe gesehen, dass manchmal das Verwenden 0bei mir nicht funktioniert, während es nilfunktioniert. Gibt es Unterschiede, wo sie verwendet werden?


1
Ich habe die Frage umgeschrieben, um klarer auszudrücken, was Sie meiner Meinung nach fragen. Fühlen Sie sich frei, die Bearbeitung rückgängig zu machen, wenn ich falsch liege.
Nispio

@nispio Ihre Änderungen sind in Ordnung. Vielen Dank. :)
Greduan

Antworten:


17

TL; DR

Bevor Sie eine Variable festlegen, müssen Sie wissen, wie diese Variable interpretiert werden soll. In ähnlicher Weise müssen Sie vor dem Aufrufen einer Funktion (einschließlich der zum Umschalten der Nebenmodi verwendeten) wissen, wie die Argumente dieser Funktion interpretiert werden.

Verwenden Sie C-hfund C-hv, um die Dokumentation für die betreffende Funktion oder Variable zu lesen. Es sollte die erwarteten Werte angeben.

"Nicht-Null" bedeutet wörtlich alles , was nicht ist nil. Dies beinhaltet 0und negative Zahlen.


Kleinere Modi

Nehmen wir ein konkretes Beispiel. Tippen C-hfblink-cursor-mode und drücken RET, um die Funktionsdokumentation zu sehen für blink-cursor-mode:

(Blink-Cursor-Modus & optionales ARG)

Blinkender Cursor umschalten (Blink-Cursor-Modus). Aktivieren Sie mit einem Präfixargument ARG den Blink-Cursor-Modus, wenn ARG positiv ist, und deaktivieren Sie ihn ansonsten. Wenn Sie von Lisp aus aufgerufen werden, aktivieren Sie den Modus, wenn ARG weggelassen wird oder Null ist.

Wir können den Blink-Cursor-Modus auf eine der folgenden Arten aktivieren:

(blink-cursor-mode)           ; Omitted argument
(blink-cursor-mode 1)         ; Positive argument
(blink-cursor-mode t)         ; True argument
(blink-cursor-mode nil)       ; nil argument (don't use this)

Beachten Sie, dass ein Argument von " twill" funktioniert, obwohl es in der Doc-Zeichenfolge nicht ausdrücklich erwähnt wurde. Obwohl dies häufig der Fall ist, ist es am sichersten, die in der Dokumentzeichenfolge angegebenen Werte zu verwenden. In diesem Fall ist dies ein positiver Wert.

Beachten Sie auch, dass ein Argument des nilWillens funktioniert. Ich würde dringend nildavon abraten, da dies Ihre Absicht unklar macht. Wenn ich Ihren Lisp-Code überfliegen würde und ein nilArgument sehen würde, würde ich davon ausgehen, dass Sie den Nebenmodus deaktivieren möchten.

Wir können auch blink-cursor-modeauf folgende Arten deaktivieren :

(blink-cursor-mode 0)         ; Non-positive argument
(blink-cursor-mode -1)        ; Negative argument

Hinweis mehr , dass nilist nicht eine der Möglichkeiten , um diesen kleineren Modus zu deaktivieren. Dies gilt für fast alle Nebenmodi, denen Sie begegnen.


Variablen

Schauen wir uns nun ein Beispiel für eine Variable an. Tippen C-hvtruncate-linesund drücken RET, um die Dokumentation für die Variable zu lesen truncate-lines:

Truncate-Lines ist eine Variable, die im C-Quellcode definiert ist.

Nicht-Null bedeutet, dass keine Fortsetzungszeilen angezeigt werden. Geben Sie stattdessen jeder Textzeile nur eine Bildschirmzeile.

Sie können das Abschneiden auf eine der folgenden Arten aktivieren:

(setq truncate-lines t)       ; Boolean true value (non-nil)
(setq truncate-lines 1)       ; Positive value (non-nil)
(setq truncate-lines 0)       ; Zero value (non-nil)
(setq truncate-lines -1)      ; Negative value (non-nil)

Es kann Sie überraschen, dass das 0und das -1funktionieren werden. Auch hier würde ich davon abraten, sie zu verwenden, da dies Ihre Absichten unklar macht.

Die einzige Möglichkeit, das Abschneiden zu deaktivieren, ist folgende:

(setq truncate-lines nil)     ; nil value

Mit anderen Worten, Sie können truncate-linesZahlen, Buchstaben, Zeichenfolgen, Listen oder alles andere, was Sie wollen, gleich setzen, solange es nicht als Wert ausgewertet nilwird, um das Abschneiden zu ermöglichen . (Aber du solltest wirklich bei toder bleiben 1).


Dies beantwortete meine Frage. Vielen Dank. :)
Greduan

0

Das sind alles verschiedene Dinge. 0, 1 und -1 sind unterschiedliche Zahlen; nilist ein Symbol.

Sie werden überall verwendet, für viele verschiedene Dinge. Um herauszufinden, wofür die einzelnen in einem bestimmten Kontext verwendet werden , konsultieren Sie das Dokument für diesen Kontext . Dazu gehört, dass Sie verschiedene Modi aktivieren oder deaktivieren, verschiedene Dinge mithilfe von Variablen aktivieren und deaktivieren und viele andere Kontexte.

In Summe:

  • Ihre Frage ist viel zu weit gefasst, um nützlich zu sein.
  • Sie müssen das Dokument konsultieren: (a) im Allgemeinen, um etwas über Emacs Lisp zu erfahren, und (b) in bestimmten Kontexten (z. B. das Dokument für einen bestimmten Modus).

In der Dokumentation für einen bestimmten Modus erfahren Sie im Allgemeinen, wie Sie ihn aktivieren und deaktivieren können. Wenn Sie aufgefordert werden, 1 oder -1 oder nilnicht nilfür etwas zu verwenden, bedeutet dies Folgendes. Es gibt einige allgemeine Regeln zum Ein- und Ausschalten von Modi (interaktiv und über Lisp-Code). Aber es hört sich so an, als müsste man sich zunächst einen allgemeinen Hintergrund verschaffen.

Lesen Sie das Emacs-Dokument, um zu erfahren, wie Sie von Emacs selbst Hilfe und andere Informationen anfordern können : Überprüfen des Werts einer Variablen, Anzeigen des Dokuments einer Variablen oder einer Funktion (einschließlich einer Funktion zum Ein- und Ausschalten eines Modus). , und so weiter.

Sie können mit C-h C-h ( Ctrl-h Ctrl-h) beginnen, um mehr über das Emacs-Hilfesystem zu erfahren. Und von dort aus bauen.

C-h rbringt Sie in das Emacs-Handbuch. Versuchen Sie, die Emacs - Tutorial: C-h t. Besuchen Sie auch die Emacs Wiki Newbie- Seite und die Seite über LearningEmacs .

Um etwas über Emacs Lisp zu lernen C-h i, wählen Sie das genannte Handbuch aus Emacs Lisp Intround lesen Sie es. Auf der Emacs-Wiki-Seite erfahren Sie mehr über das Erlernen von Emacs Lisp .


1
Danke für deine Antwort. :) Ich schätze, ich habe gefragt, in welchen Kontexten sie verwendet werden. Hätte das klarer machen sollen. Vielen Dank. :) Mir sind die Hauptunterschiede zwischen den Symbolen bekannt, zum Beispiel, wie nildas logische Äquivalent von falsch und twahr ist und der Rest sind nur Zahlen. Aber ich war nicht sicher, was Kontexte wurden sie in der Regel eingesetzt.
greduan

Lesen Sie, was ich über allgemeine Informationen zu Modi geschrieben habe (im Zusammenhang mit dem Handbuch). Trotz dieser allgemeinen Informationen sollten Sie immer zuerst das Dokument nach dem gewünschten Modus durchsuchen. Dort erfahren Sie, wie Sie es aktivieren oder deaktivieren können. Ist dies nicht der Fall, gilt das im Handbuch beschriebene allgemeine Verhalten. Beginnen Sie jedoch mit dem jeweiligen Modus doc . Der Punkt ist nicht der Unterschied zwischen diesen Dingen an und für sich. Es geht um Unterschiede in der Verwendung in bestimmten Kontexten. Fragen Sie zunächst nach dem Kontext.
Drew

1
OKAY. Vielen Dank. :) Cool, dass Emacs eine eigene SE-Seite hat, oder?
Greduan

1
PS Mach dir keine Sorgen. Ich bin sicher, dass andere die Bohnen hier über einige der allgemeinen Regeln verschütten werden . ;-) Ich ziehe es vor, (a) Sie dazu zu bewegen, das Dokument zu konsultieren, da es nur für dieses Lernen geschrieben wurde, und (b) Sie dazu zu bewegen, immer den bestimmten Modus nach sich selbst zu fragen. Die allgemeinen Regeln lassen keine Einzelheiten des Modus außer Acht. Wenn Sie letztere ignorieren, werden Sie Dinge vermissen.
Drew

Was cool sein wird, wird sein, wenn SE seinen eigenen Emacs-Modus bekommt. ;-)
Drew
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.