2010-09-17 35 views
5

Tôi đã tìm kiếm ở đây và trên mạng nhưng không có câu trả lời.Trường hợp F # có nhạy cảm không?

Lý do tôi hỏi là, kể từ khi F # ước có vẻ như họ ủng hộ chữ noncapital, sử dụng các loại BCL với ước Pascal trông lạ trong F #, như trong:

let stringD = String.Join(" ",[| stringA; stringB |]) 

Có vẻ như nó sẽ được nhiều hơn trong tinh thần F # như thế này:

let stringD = string.join(" ",[| stringA; stringB |]) 

Trả lời

8

Ok, một vài điều.

Đầu tiên, F # phân biệt chữ hoa chữ thường.

Thứ hai, quy ước F # để đặt tên được mô tả trong F# Component Design Guidelines . Tóm lại, các thành viên bị ràng buộc bên trong các mô-đun F # sử dụng camelCase, nhưng tất cả các cấu trúc .NET OO đều sử dụng PascalCase. Điều này đúng trong toàn bộ thư viện F #.

Cuối cùng, trong F # string không phải là một từ khóa, chứ không phải nó là cả tên của một type abbreviation (ví System.String) và tên của một function (có thể chuyển đổi thành một chuỗi). Trong ngữ cảnh biểu thức của string.Join, tên hàm được ưu tiên, đó là lý do tại sao string.Join không hoạt động. Và do trường hợp nhạy cảm, System.String.join sẽ không bao giờ hoạt động (trừ khi bạn đã thêm thành viên của tiện ích mở rộng).

+0

Cảm ơn câu trả lời tuyệt vời. Có vẻ như tôi sẽ hỏi bạn rất nhiều câu hỏi F # ở đây nếu bạn không phiền: O –

+0

Tôi sẽ học F # nhưng tôi sẽ không vì điều này ... – beppe9000

1

Đáng ngạc nhiên, the F# Language Specification không đề cập đến một cách rõ ràng trường hợp nhạy cảm, nhưng không đề cập đến việc sử dụng vỏ khác nhau cho intrinsics/ngôn ngữ và các thông số kiểu người dùng định nghĩa (5.1.2)

Trong khi kinh nghiệm của tôi với F # bị giới hạn (ngoài các ứng dụng kiểu Hello World), tôi giả định rằng string.join không liên kết với String.Join.

+0

Ok Tôi có thể hiểu Tham gia không được tìm thấy trong Chuỗi, nhưng trong chuỗi C# hoặc Chuỗi hoạt động để truy cập thành viên của nó. Tại sao điều này không hoạt động trong F #? Đây có phải là một số phép thuật IDE đằng sau vỏ bọc cho C# không? –

+3

Trong C#, 'chuỗi' là một từ khóa có nghĩa là 'System.String'. Trong F #, 'string' là tên của hàm cũng như bí danh loại và không phải là từ khóa. – Brian

2

Vâng, F # là trường hợp nhạy cảm

let stringD = string.join(" ",[| stringA; stringB |]) 

sẽ không hoạt động.

Các vấn đề liên quan