2015-03-27 3 views
1

Есть ли хорошая ссылка, которая табулирует, какие типы F # являются типами значений и которые являются ссылочными типами? Кроме того, есть ли хороший способ запросить тип, чтобы определить, что это такое? Да, я знаю, что вещи, которые являются классами, являются ссылочными типами, а вещи, которые являются структурами, являются типами значений. В то же время это различие не всегда интуитивно для меня с типами F #. Например, tuple types are reference types. Очевидно, что это и типы записей.Ссылка, которая табулирует, какие типы F # являются типами значений и которые являются ссылочными типами.

ответ

4

Вы всегда можете проверить, является ли что-то тип значения с помощью F # Interactive:

typeof<int * int>.IsValueType 

Как уже упоминалось, кортежи являются ссылочными типами и поэтому это возвращает false.

Я согласен, что разница не всегда ясна. В общем, большинство типов, с которыми вы работаете в F #, являются ссылочными типами (и всеми типами F #, которые вы определяете, за исключением struct types).

  • Примитивные типы (числовые и булевы) типы значений
  • Но string является ссылочным типом
  • Там будут несколько типов структуры, определенные в .NET как DateTime и TimeSpan, а также KeyValuePair (иногда это путают, так как это очень похоже на кортеж).
  • F # кортежи, записи, дискриминационные объединения, списки, массивы - все ссылочные типы
  • Типы объектов F # также являются ссылочными типами, если они не обозначены как Struct.
Смежные вопросы