Cách chọn giữa nil và 0, hoặc t và 1 khi cài đặt biến hoặc bật chế độ


19

Tôi hiểu rằng nil, 0và / hoặc -1được sử dụng để vô hiệu hóa một số tính năng và t, 1hoặc / hoặc +1được sử dụng để bật một số tính năng. Khi gán biến hoặc bật / tắt chế độ nhỏ, tôi nên chọn chế độ nào?

Tôi đã thấy tất cả các biến thể được sử dụng ở điểm này hay điểm khác. Nó khiến tôi tự hỏi liệu thực sự có một sự khác biệt giữa chúng. Tôi đã thấy rằng đôi khi sử dụng 0không làm việc cho tôi, trong khi nilđó. Có sự khác biệt về nơi chúng được sử dụng?


1
Tôi đã viết lại câu hỏi để nói rõ hơn những gì tôi nghĩ bạn đang hỏi. Vui lòng hoàn nguyên chỉnh sửa nếu tôi sai.
nispio

@nispio Chỉnh sửa của bạn là tốt. Cảm ơn nhiều. :)
greduan

Câu trả lời:


17

TL; DR

Trước khi bạn đặt bất kỳ biến nào, bạn phải biết biến đó được diễn giải như thế nào. Tương tự, trước khi bạn gọi bất kỳ hàm nào (bao gồm các hàm được sử dụng để chuyển đổi các chế độ nhỏ), bạn phải biết cách các đối số của hàm đó được diễn giải.

Sử dụng C-hfC-hvđể xem tài liệu cho chức năng hoặc biến trong câu hỏi. Nó sẽ chỉ định các giá trị được mong đợi.

"Non-nil" có nghĩa đen là bất cứ thứ gì không có nil. Điều này bao gồm 0và số âm.


Chế độ nhỏ

Hãy lấy một ví dụ cụ thể. Nhập C-hfblink-cursor-mode và nhấn RETđể xem tài liệu chức năng cho blink-cursor-mode:

(nhấp nháy chế độ con trỏ & ARG tùy chọn)

Chuyển đổi nhấp nháy con trỏ (Chế độ con trỏ nhấp nháy). Với ARG đối số tiền tố, bật chế độ Blink Coder nếu ARG dương và tắt nó đi. Nếu được gọi từ Lisp, hãy bật chế độ nếu ARG bị bỏ qua hoặc không.

Chúng tôi có thể kích hoạt chế độ Blink Coder theo bất kỳ cách nào sau đây:

(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)

Lưu ý rằng một đối số tsẽ hoạt động, mặc dù chuỗi doc không đề cập cụ thể đến nó. Mặc dù điều này thường xảy ra, nhưng cách an toàn nhất của bạn là sử dụng những gì chuỗi doc cho bạn sử dụng, trong trường hợp này là một giá trị dương.

Ngoài ra, lưu ý rằng một đối số nilsẽ làm việc. Tôi thực sự khuyên bạn nên chống lại niltheo cách này bởi vì nó làm cho ý định của bạn không rõ ràng. Nếu tôi đang lướt qua mã lisp của bạn và tôi thấy một nilđối số, tôi sẽ cho rằng bạn muốn tắt chế độ nhỏ.

Chúng tôi cũng có thể vô hiệu hóa blink-cursor-modetheo các cách sau:

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

Một lần nữa lưu ý rằng đó không phảinil là một trong những cách để vô hiệu hóa chế độ nhỏ này. Điều này đúng với hầu hết mọi chế độ nhỏ mà bạn sẽ gặp.


Biến

Bây giờ hãy xem một ví dụ về một biến. Nhập C-hvtruncate-linesvà nhấn RETđể xem tài liệu cho biến truncate-lines:

truncate-lines là một biến được định nghĩa trong 'mã nguồn C'.

Non-nil có nghĩa là không hiển thị các dòng tiếp tục. Thay vào đó, cung cấp cho mỗi dòng văn bản chỉ một dòng màn hình.

Bạn có thể bật cắt ngắn theo bất kỳ cách nào sau đây:

(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)

Nó có thể làm bạn ngạc nhiên rằng 0-1sẽ làm việc. Một lần nữa, tôi khuyên bạn không nên sử dụng chúng vì nó làm cho ý định của bạn không rõ ràng.

Cách duy nhất để vô hiệu hóa cắt ngắn là:

(setq truncate-lines nil)     ; nil value

Nói cách khác, bạn có thể đặt truncate-linesbằng số, chữ cái, chuỗi, danh sách hoặc bất cứ thứ gì bạn muốn, miễn là nó không đánh giá nilnó sẽ cho phép cắt ngắn. (Nhưng bạn nên thực sự gắn bó với thoặc 1).


Điều này đã trả lời câu hỏi của tôi. Cảm ơn bạn. :)
greduan

0

Đây là tất cả những điều khác nhau. 0, 1 và -1 là các số khác nhau; nillà một biểu tượng.

Chúng được sử dụng ở mọi nơi, cho nhiều thứ khác nhau. Để tìm hiểu từng cái được sử dụng cho một bối cảnh cụ thể , hãy tham khảo tài liệu cho bối cảnh đó . Và bao gồm các bối cảnh bật hoặc tắt các chế độ khác nhau, bật và tắt các thứ khác nhau bằng cách sử dụng các biến và nhiều bối cảnh khác.

Tóm lại:

  • Câu hỏi của bạn quá rộng để có ích.
  • Bạn cần tham khảo tài liệu: (a) nói chung, để tìm hiểu một chút về Emacs Lisp và (b) trong các bối cảnh cụ thể (ví dụ: tài liệu cho một chế độ cụ thể).

Tài liệu cho một chế độ nhất định thường cho bạn biết cách bật và tắt. Nếu nó bảo bạn sử dụng 1 hoặc -1 nilhoặc không - nilcho một cái gì đó, thì đó là ý nghĩa của nó. Có một số quy tắc chung để bật và tắt chế độ (tương tác và từ mã Lisp). Nhưng có vẻ như bạn thực sự cần phải bắt đầu bằng cách có được một số nền tảng chung.

Tham khảo tài liệu Emacs để tìm hiểu cách yêu cầu trợ giúp và thông tin khác từ chính Emacs : cách kiểm tra giá trị của biến, cách xem tài liệu của biến hoặc hàm (bao gồm cả chức năng bật / tắt chế độ) , v.v.

Bạn có thể bắt đầu bằng cách sử dụng C-h C-h ( Ctrl-h Ctrl-h), để tìm hiểu về hệ thống trợ giúp của Emacs. Và xây dựng từ đó.

C-h rđưa bạn vào hướng dẫn sử dụng Emacs. Hãy thử hướng dẫn Emacs : C-h t. Và kiểm tra trang Emacs Wiki Newbie và trang về LearningEmacs .

Để bắt đầu tìm hiểu về Emacs Lisp : C-h i, sau đó chọn hướng dẫn có tên Emacs Lisp Introvà bắt đầu đọc. Và kiểm tra trang Wiki của Emacs về Học Emacs Lisp .


1
Cảm ơn câu trả lời của bạn. :) Tôi đoán tôi đã hỏi về bối cảnh họ đang sử dụng. Nên làm cho nó rõ ràng hơn. Cảm ơn bạn. :) Tôi nhận thức được sự khác biệt chính giữa các biểu tượng, như cách niltương đương logic của sai và tđúng và phần còn lại chỉ là số. Nhưng tôi không chắc chắn về bối cảnh mà chúng thường được sử dụng.
greduan

Xem những gì tôi đã viết về thông tin chung về các chế độ (được liên kết với hướng dẫn). Mặc dù có thông tin chung như vậy, bạn nên luôn luôn bắt đầu bằng cách kiểm tra tài liệu cho chế độ cụ thể mà bạn quan tâm. Nó sẽ cho bạn biết nên sử dụng gì để bật hoặc tắt. Nếu không, thì hành vi chung được mô tả trong hướng dẫn sẽ được áp dụng, nhưng bắt đầu với tài liệu chế độ cụ thể . Vấn đề không phải là sự khác biệt giữa những điều đó trong và của chính họ. Vấn đề là sự khác biệt trong cách chúng được sử dụng trong các bối cảnh cụ thể. Đối với điều đó, bắt đầu bằng cách hỏi bối cảnh.
vẽ

1
ĐƯỢC. Cảm ơn nhiều. :) Thật tuyệt khi Emacs có trang SE của riêng mình nhỉ?
greduan

1
PS Đừng lo lắng. Tôi chắc chắn rằng những người khác sẽ làm đổ đậu ở đây về một số quy tắc chung . ;-) Tôi thích (a) giúp bạn tham khảo tài liệu về điều này, bởi vì nó được viết chỉ với ý nghĩ này và (b) khiến bạn bắt đầu bằng cách luôn hỏi chế độ cụ thể về chính nó. Các quy tắc chung không thổi phồng chi tiết chế độ, và nếu bạn bỏ qua cái sau thì bạn sẽ bỏ lỡ mọi thứ.
vẽ

Điều tuyệt vời sẽ là khi SE có chế độ Emacs của riêng mình. ;-)
vẽ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.