Có sự khác biệt nào về ý nghĩa giữa t<'a>
và 'a t
trong F # không? Chúng có thể được sử dụng thay thế cho nhau ngay cả sau khi khai báo không?Bất kỳ sự khác biệt nào giữa t <'a> và 'a t in F #?
Trả lời
Không có sự khác biệt, và có, chúng có thể được sử dụng thay thế cho nhau ngay cả sau khi khai báo.
Nhưng đừng chú ý F# Component Design Guidelines khuyến nghị (Phần 4.2):
Xem xét sử dụng cú pháp tiền tố cho generics (
Foo<T>
) ưu tiên cú pháp postfix (T Foo
), với bốn trường hợp ngoại lệ đáng chú ý (list
,option
,array
,ref
).F # kế thừa cả kiểu đặt tên mã bưu điện ML theo kiểu các loại chung, ví dụ: “
int list
” cũng như kiểu tiền tố .NET, ví dụ: “list<int>
”. Bạn nên chọn kiểu .NET, ngoại trừ bốn loại cụ thể. Đối với danh sách F #, hãy sử dụng biểu mẫu postfix: “int list
” thay vì “list<int>
”. Đối với các tùy chọn, hãy sử dụng biểu mẫu postfix: “int option
” thay vì “option<int>
”. Đối với mảng, hãy sử dụng tên cú pháp “int[]
” thay vì “int array
” hoặc “array<int>
”. Đối vớirefs
, sử dụng “int ref
” thay vì “ref<int>
” hoặc “Ref<int>
”. Đối với tất cả loại khác, sử dụng các hình thức tiền tố: “HashSet<int>
”, “Dictionary<string,int>
”, vì đây phù hợp với tiêu chuẩn NET
Ngoài ra, bạn sẽ nhận được một cảnh báo trình biên dịch nếu bạn sử dụng ML-phong cách chung chung ký hiệu danh sách tham số, ví dụ ('a,'b) t
và t<'a,'b>
.
Và trong khi chúng tôi đang ở đó, lưu ý các khuyến nghị sau đây trong Section 3.1 của hướng dẫn tương tự:
Đừng sử dụng PascalCase cho tên tham số chung trong các API công cộng, bao gồm cho F # -facing thư viện. Cụ thể, sử dụng các tên như T, U, T1, T2 cho các thông số chung tùy ý và khi tên cụ thể làm cho cảm giác , thì đối với các thư viện F # -facing, hãy sử dụng các tên như Khóa, Giá trị, Arg (nhưng không phải là TKey).
(mặc dù cá nhân tôi có xu hướng bỏ qua đề xuất này cho F # -facing thư viện công cộng).
Không có sự khác biệt nào cả, không chắc chắn đây có đáng để trả lời toàn bộ không! Tôi thích đặc biệt là trước đây khi nói đến nhiều loại tham số (là có thể với sau này?).
Tôi sẽ nói sự khác biệt là dễ đọc. Đối với một tham số, cú pháp '
không quá khó hiểu nhưng khi bạn nhận được một danh sách các cú pháp, việc đọc phiên bản khung góc trở nên dễ dàng hơn nhiều.
Tôi nghĩ rằng cú pháp 'a t
là thành ngữ hơn (nó được sử dụng trong hầu hết tất cả các ví dụ MSDN và phát ra bởi trình biên dịch sẽ tạo ra rằng cú pháp cho các tập tin chữ ký)
Có một ví dụ tương tự đối với mảng
int[] , int array
cú pháp 'a t
là cũng đẹp hơn cho các thông số cụ thể -
int list, List<int>
vì vậy một số tính nhất quán lập luận cho 'a t
- 1. Sự khác biệt giữa Danh sách <T> và LinkedList <T>
- 2. Sự khác biệt giữa <T extends A> void foo (Tt) và void foo (A a)
- 3. Có sự khác biệt nào giữa "T" và "const T" trong thông số mẫu không?
- 4. Sự khác nhau giữa HashSet <T> và Danh sách <T> là gì?
- 5. Bất kỳ sự khác biệt nào giữa f (const string &) và f (const string)?
- 6. Sự khác nhau giữa .CreateObjectSet <T>, .Set <T> và .CreateQuery <T>?
- 7. Cách viết asInstanceOfOpt [T] trong đó T <: Bất kỳ
- 8. Sự khác nhau giữa IEnumerable và IEnumerable <T>?
- 9. Sự khác biệt giữa "mẫu <class T>" và "mẫu <typename T>" là gì?
- 10. Sự khác biệt giữa Danh sách <T> và Danh sách <object>?
- 11. Sự khác biệt giữa ";" và "GO" trong T-SQL?
- 12. Bất kỳ sự khác biệt nào giữa DateTime.Parse và Convert.ToDateTime?
- 13. Bất kỳ sự khác biệt nào giữa malloc và Marshal.AllocHGlobal?
- 14. Sự khác biệt giữa các cách khác nhau để khởi tạo một đại biểu (Func <T, T>)?
- 15. Sự khác nhau giữa ReadOnlyCollection <T> và ReadOnlyCollectionBuilder <T> trong .Net là gì?
- 16. Sự khác nhau giữa 'T & `và` const T &' cho tất cả const lớp
- 17. Ràng buộc tham số kiểu phản xạ: X <T> trong đó T: X <T> - bất kỳ lựa chọn thay thế đơn giản nào khác?
- 18. Sự khác nhau giữa Test t; và Kiểm tra t() ;? nếu thử nghiệm là một lớp
- 19. sự khác biệt giữa <a onclick="someFunction"> and <a onclick="someFunction()">
- 20. Sự khác biệt giữa "a" và "a: link"
- 21. Có bất kỳ sự khác biệt giữa mảng mảng và đóng gói trong Delphi?
- 22. Phương pháp đối diện của bất kỳ <T>
- 23. Có bất kỳ sự khác biệt nào giữa các phương thức lặp lại có thể truy cập được trên IEnumerable <T> và IEnumerator <T> không?
- 24. Sự khác biệt giữa @ (posedge Clk); a <= 1'b1; và @ (posedge Clk) a <= 1'b1;
- 25. F # - Mảng <'T> là gì?
- 26. boost :: make_shared <T> (...) không biên dịch, shared_ptr <T> (mới T (...)) hiện
- 27. Kiểu tham số T đang ẩn kiểu T trong <T> T [] toArray (T [] a) bằng Eclipse
- 28. F #: Nullable <T> Hỗ trợ
- 29. Sự khác biệt giữa if -e và if -f
- 30. Bất kỳ sự khác biệt nào giữa configure.ac và configure.in, và Makefile.am và Makefile.in?
Có, bạn làm '(chuỗi, phao) Hashtbl.t' trong OCaml. –