2015-04-06 2 views
1

Это вопрос определения языка F #. Мне было интересно, почему F # не может автоматически вывести Явные поля в первую очередь? А затем DefaultValue автоматически также ...F # класс Явные поля и DefaultValue

Почему есть другой синтаксис класса (так много из них в F #) ... где вместо let связанное поле без значения (но с типом) может быть интерпретировано автоматически как (значение) val. Кроме того, когда для параметра DefaultValue требуется по умолчанию конструктор по умолчанию, почему бы просто не вывести его автоматически?

let myInt1 : int интерпретируется как значение: val myInt1 : int или [<DefaultValue>] val myInt : int

Наконец (может быть другая тема, и поэтому, пожалуйста, рассмотреть его в качестве второстепенного запроса), поэтому явные поля (или открытые поля) требуют справочник самоидентификатора в методах члена? И снова синтаксис реализации класса теряет большую часть своей простоты.

Спасибо!

+3

Я не думаю, что вы получите авторитетный ответ здесь. Если бы я был вами, я бы открыл вопрос об обслуживании и посмотрел, каков будет ответ. –

+0

Язык должен сделать простые операции простыми и необычными. Явные поля - необычная вещь в моей книге - я даже не могу думать о ситуации, когда я чувствовал необходимость использовать явный синтаксис определения класса над неявным. Поэтому для меня имеет смысл * не * оптимизировать для необычного сценария. – scrwtp

+0

Добавление в @scrwtp: F # является функционально-первым языком. Классы редко используются в программах F # - в основном для взаимодействия с другими языками .NET. – Petr

ответ

0

Я не претендую на понимание все вашего вопроса.

Явные поля, естественно, не могут быть выведены из значения, потому что нет значения; он неинициализирован. Поэтому вам нужно дать тип.

let myInt : int на самом деле не имеет смысла, потому что пусть требуется значение.

Я согласен с вами в последней точке, val может так же легко быть в сфере действия и не требует от this отборочного, подчиняющегося нормальным правилам теневого копирования.