2013-03-13 24 views
7

Về F # tự nhận dạng như trong:Có quy ước đặt tên chuẩn cho tự định danh trong F # không?

type MyClass2 = 
    let data = 123 

    member whateverYouWant.PrintMessage() = 
     printf "MyClass2 with Data %d" data 

Các F# class documentation nói:

Không giống như trong các ngôn ngữ .NET khác, bạn có thể đặt tên tự nhận dạng tuy nhiên bạn muốn; bạn không bị giới hạn các tên như tự, tôi hoặc điều này.

(Câu trả lời cho câu hỏi What are the benefits of such flexible "self-identifiers" in F#? giải thích tính hữu ích có thể về điều này.)

Câu hỏi của tôi là, có lẽ một tiêu chuẩn không chính thức về những gì để đặt tên cho tự định danh? Đó là, mặc dù có thể không có quy ước quy tắc, có một quy tắc mô tả mô tả về các lập trình viên F # đang làm gì trong tự nhiên không? this? x? self?

Cập nhật

Vâng trông như thế này có thể bị đóng cửa, nhưng câu trả lời cho câu hỏi khác là hầu như không một câu trả lời như nó chỉ hiển thị nhiều lựa chọn mà tôi đã nhận thức được. Tôi đang tìm kiếm một sự đồng thuận. Ngoài ra, câu hỏi đó đã được hỏi vào năm 2009 và có thể đã không có một sự đồng thuận vào thời điểm đó, trong khi có thể có một bây giờ.

Cũng thú vị là cuốn sách Expert F# 3.0 được viết bởi Don Syme không sử dụng số nhận dạng tự nhất quán trong các ví dụ. Thay vào đó, dường như nó có lợi cho một số tự định danh riêng, đặc biệt là chữ cái x.

+0

'this' có lẽ là quen thuộc nhất. – Daniel

Trả lời

7
type MyClass2 as self = 
    let data = 123 

    let privatePrintMessage() = self.PrintMessage() 

    member this.PrintMessage() = 
     printf "MyClass2 with Data %d" data 

Một số người sử dụng member x.Name, nhưng đó là bị lỗi vì x không giải thích nó là gì, và đối với một trong những tên sử dụng nhiều nhất trong F # - tự nhận dạng nên tự giải thích!

Một số người cũng chọn viết member __.Name khi số nhận dạng tự không cần thiết. Đó thường là những người cùng đảm bảo không có số nhận dạng không sử dụng (dễ thực hiện với --warnon:1182). Những người khác nói rằng điều này là lạ hoặc nó dẫn đến mâu thuẫn - chọn những gì bạn thích.

+3

Đây là phương pháp cơ bản mà tôi sử dụng - sử dụng '__. Foo' khi tôi không cần mã định danh, và' this.Foo' khi tôi làm. –

1

Một câu trả lời khác nhau (nếu bạn thích nó):

Không, không có quy ước đặt tên tiêu chuẩn để tự định danh. Bạn nên chọn một cho mỗi dự án và thực thi nó.

3

Có một số tùy chọn - mọi người thường viết this hoặc self hoặc x. Tôi nghĩ rằng x có lẽ là mô tả ít nhất, nhưng nó được sử dụng khá thường xuyên - có lẽ đó là một điều sai trái! Một tùy chọn tốt khác là sử dụng số nhận dạng đề cập đến tên của lớp học (ví dụ: person hoặc point), vì đó là thông tin khá.

type Point(x:float, y:float) = 
    member point.X = x 
    member point.Y = y 

Nhưng tôi đồng ý rằng bạn cảm thấy hơi thừa khi bạn không thực sự sử dụng tự tham chiếu. Vì vậy, việc sử dụng __ sẽ có ý nghĩa. Tôi nghĩ rằng nó là một chút không may mà bạn không thể sử dụng chỉ là bình thường (duy nhất) _.

Vì vậy, tóm lại, có thể không có tiêu chuẩn được đề xuất duy nhất - nhưng có một vài mẫu phổ biến.

+0

Tôi đã mở một [vấn đề UserVoice cho phép tự xác định wildard] (http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/3745318-allow-wildcard-self-identifiers). – Daniel

+0

Bạn thấy mình sử dụng thường xuyên nhất điều gì? – User

+1

@Người dùng Tomas đã từng sử dụng 'x.' vài lần trong cuốn sách“ FP thực tế của mình ”. Tôi đã nhìn thấy cả 'x.' và' this.' trong bản nháp “F # Deep Dives” gần đây. –

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