Как перечислить перечисление/тип в F#

Мне определили перечисляемый тип как так:

type tags = 
    | ART  = 0
    | N    = 1
    | V    = 2 
    | P    = 3
    | NULL = 4

есть ли способ сделать a for ... in tags do ?

Это - ошибка, которую я получаю:

Значение, конструктор, пространство имен или тип tags не определяется

13
задан jason 3 February 2010 в 14:13
поделиться

4 ответа

Используйте Enum.GetValues ​​:

let allTags = Enum.GetValues(typeof<tags>)
8
ответ дан 1 December 2019 в 20:56
поделиться

Чтобы сделать его enum, вам нужно явно дать значения каждому случаю, в противном случае это профсоюзный тип:

type tags = 
    | ART = 0
    | N = 1
    | V = 2
    | P = 3
    | NULL= 4
let allTags = System.Enum.GetValues(typeof<tags>)
3
ответ дан 1 December 2019 в 20:56
поделиться

Вот полный пример, который выводит информацию о любом размеченном объединении. Он показывает, как получить случаи размеченного объединения, а также как получить поля (в случае, если они вам нужны). Функция печатает объявление типа данного дискриминированного объединения:

open System
open Microsoft.FSharp.Reflection

let printUnionInfo (typ:Type) = 
  printfn "type %s =" typ.Name
  // For all discriminated union cases
  for case in FSharpType.GetUnionCases(typ) do
    printf "  | %s" case.Name
    let flds = case.GetFields()
    // If there are any fields, print field infos
    if flds.Length > 0 then 
      // Concatenate names of types of the fields
      let args = String.concat " * " [ for fld in flds -> fld.PropertyType.Name ] 
      printf " of %s" args
    printfn ""    

// Example
printUnionInfo(typeof<option<int>>)
6
ответ дан 1 December 2019 в 20:56
поделиться

Вы, конечно, можете изменить сообщения журнала задним числом, это рассматривается в часто задаваемых вопросах . Я не уверен, как работает интерфейс командной строки для StartSVN, но для vanilla svn команда будет

svn propset -r N --revprop svn:log "new log message" URL

Если вы хотите сделать это для всех редакций без выгрузки репозитория и повторной загрузки, вы можете создать сценарий этой команды для работы со списком всех редакций. Для выполнения этого пути потребуется некоторое время, в зависимости от размера репозитория, но в принципе нет причин, по которым вы не можете это сделать, и это не требует дампа и перезагрузки.

Кроме того, vanilla SVN имеет команду svnlook , которая представляет собой средство администрирования, работающее непосредственно с файлами репозитория. Этот инструмент не понимает URL (вы должны иметь доступ на уровне файловой системы к репозиторию), но намного быстрее. Синтаксис немного отличается, но свойства можно изменить таким же образом, используя этот инструмент.

-121--804322-

Одним из примеров API высокого (er) уровня в BouncyCastle может быть пакет CMS ( Синтаксис криптографических сообщений ). Это поставляется в отдельной банке (bcmail) от самого провайдера, и записывается в JCE (версия C # написана против облегченного API, однако).

«Send a confidential message» реализуется, грубо говоря, классом CMSEnvableedDataGenerator, и все, что вам действительно нужно сделать, это дать ему сообщение, выбрать алгоритм шифрования (все детали обрабатываются внутри), а затем указать один или несколько способов, которыми получатель сможет прочитать сообщение: это может быть основано на открытом ключе/сертификате, общем секрете, пароле или даже протоколе соглашения о ключе. В сообщении может быть несколько получателей, а также можно смешивать и сопоставлять типы получателей.

Можно использовать CMSSignedDataGenerator для аналогичной отправки проверяемого сообщения. Если вы хотите подписать и зашифровать, структуры CMS являются вложенными/составными (но порядок может быть важным). Существует также генератор данных CMSCompedDataGenerator и недавно добавленный CMSAuthenticureData.

-121--1428388-

Право Роберта на создание фактического перечисления и получение его вариантов. При наличии истинного типа объединения обращения можно получить с помощью функции Microsoft.FSharp.Reflection.FSharpType.GetUnionCases .

2
ответ дан 1 December 2019 в 20:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: