2013-03-13 3 views
7

Что касается F # автопортреты идентификаторов х, как в:Существует ли стандартное соглашение об именах для самоидентификаторов в F #?

type MyClass2 = 
    let data = 123 

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

F# class documentation говорит:

В отличие от других языков .NET, вы можете назвать самостоятельной идентификатор однако вы хотите; вы не ограничены такими именами, как self, Me или .

(Ответ на вопрос What are the benefits of such flexible "self-identifiers" in F#? объясняет возможную полезность этого.)

Мой вопрос, есть, возможно, неофициальный стандарт того, что назвать само-идентификатор? То есть, в то время как не может быть предписывающий договор, существует ли описательный код, что программисты F # делают в дикой природе? this? x? self?

Update

Ну похоже, это может свернута, но ответ на другой вопрос, вряд ли ответ, как это просто показывает несколько вариантов, которые я уже в курсе. Я ищу консенсус. Кроме того, этот вопрос был задан в 2009 году, и в то время, возможно, не было консенсуса, хотя сейчас может быть один.

Также интересна книга Expert F# 3.0, автором которой является Дон Сим, не использует последовательный самоидентификатор в примерах. Скорее, он предпочитает идентификаторы одиночных букв, особенно букву x.

+0

'this', вероятно, самый знакомый. – Daniel

ответ

7
type MyClass2 as self = 
    let data = 123 

    let privatePrintMessage() = self.PrintMessage() 

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

Некоторые люди используют member x.Name, но это потому, что неисправна x не объясняет, что это такое, и для одной из наиболее часто используемых имен в F # - идентификатор само должно быть само за себя!

Некоторые люди также предпочитают писать member __.Name, когда самоидентификатор не нужен. Обычно это те же люди, которые уверены, что нет неиспользуемых идентификаторов (легко сделать с --warnon:1182). Другие люди говорят, что это странно или что это приводит к непоследовательности - выбирайте то, что вам нравится.

+3

Это в основном подход, который я использую - используя '__. Foo', когда мне не нужен идентификатор и' this.Foo', когда я это делаю. –

1

Другой ответ (если вы предпочитаете):

Нет, нет никакого стандартного именования для самостоятельных идентификаторов. Вы должны выбрать один для каждого проекта и обеспечить его соблюдение.

3

Существует несколько вариантов - люди часто пишут this или self или x. Я думаю, x, вероятно, наименее описательный, но он используется довольно часто - возможно, это неправильно! Другим хорошим вариантом является использование идентификатора, который ссылается на имя класса (например, person или point), потому что это довольно информативно.

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

Но я согласен с тем, что он чувствует себя немного избыточным, когда вы на самом деле не используете самонаблюдение. Поэтому использование __ имеет смысл. Я думаю, что это немного неудачно, что вы не можете использовать только обычный (одиночный) _.

Итак, в общем, нет, по-видимому, единого рекомендованного стандарта, но существует несколько общих шаблонов.

+0

Я открыл проблему [UserVoice для разрешения самоидентификации wildard] (http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/3745318-allow-wildcard-self-identifiers). – Daniel

+0

Что вы чаще всего используете? – User

+1

@ Пользователь Tomas использовал 'x.' несколько раз в своей книге« Real-World FP ». Я видел как «x.', так и« this. »в недавнем проекте« F # Deep Dives ». –

Смежные вопросы