Rất nhiều mẫu Scala mã chứa Strings và Bộ sưu tập có tên "xs". Tại sao xs?Tại sao danh sách và chuỗi định danh có tên là "xs" (trong Scala và các ngôn ngữ khác)?
Ví dụ:
var xs = List(1,2,3)
val xs = "abc"
Rất nhiều mẫu Scala mã chứa Strings và Bộ sưu tập có tên "xs". Tại sao xs?Tại sao danh sách và chuỗi định danh có tên là "xs" (trong Scala và các ngôn ngữ khác)?
Ví dụ:
var xs = List(1,2,3)
val xs = "abc"
Về cơ bản đó là quy ước đặt tên bắt nguồn từ LISP. Lý do đằng sau nó là:
Tôi nghĩ đó là xii;) –
@Paul - no, chỉ hoạt động khi bạn có chính xác 12 xs –
Tôi đã nhìn thấy tên này được sử dụng cho các biến danh sách trong hướng dẫn lập trình chức năng, nhưng không dây (trừ trường hợp một chuỗi được coi là một danh sách các nhân vật).
Về cơ bản, đây là tên giả được sử dụng trong các ví dụ. Bạn có thể đặt tên biến vô hướng x
trong khi danh sách sẽ là xs
, vì xs
là số nhiều của x
. Trong mã sản xuất, tốt hơn là nên có một tên mô tả hơn.
Bạn cũng có thể thấy điều này trong mã có mẫu khớp với danh sách. Ví dụ (trong OCaml):
let rec len l =
match l with
| [] -> 0
| x :: xs -> 1 + len xs
Một cặp mô tả nhiều hơn các tên có thể là first :: rest
, nhưng đây chỉ là một ví dụ.
Tôi có xu hướng sử dụng cùng một quy ước trong sản xuất, ví dụ như "thứ tự" và "đơn hàng";) – bbozo
Ngoài thực tế là xs
được hiểu là một số nhiều của x như @Ken Bloom điểm ra, nó cũng có liên quan cần lưu ý cách ngôn ngữ như Scala cấu trúc List
. List
được cấu trúc dưới dạng danh sách được liên kết, trong đó vùng chứa có tham chiếu đến mục đầu tiên và phần còn lại của danh sách.
Các ::
điều hành (gọi tắt là cons) xây dựng các danh sách như:
42 :: 69 :: 613 :: Nil
Các ::
khi xuất hiện trong mô hình kết hợp cũng trích ra một danh sách vào mục đầu tiên và phần còn lại của danh sách như sau:
List(42, 69, 613) match {
case x :: xs => x
case Nil => 0
}
Vì mẫu này xuất hiện ở mọi nơi, lại người quảng cáo có thể phỏng đoán rằng xs
ngụ ý "phần còn lại của danh sách".
Tôi phát âm tinh thần "xs" là "dư thừa", như trong phần "phần còn lại". – nibot
Có liên quan (nhưng có thể không trùng lặp) http://stackoverflow.com/questions/1564758/does-functional-programming-mandate-new-naming-conventions –