Получение пустого значения в генераторе F # - PullRequest
0 голосов
/ 05 декабря 2018

У меня проблема с этим кодом, я попытался сгенерировать список непустых строк, например:

let! x = Arb.generate<string> |> Gen.filter(fun (x) -> x<>null && x <>""&& x<>" ")|>Gen.nonEmptyListOf 

после запуска кода я получаю следующие выходные данные:

val it : string list [] =
  [|["""; ")"; ":}E"; "B"; "!"; "v"; "re"; "Dv-"; ""; "";
     "eALyb|>Jn %;a="v`m:<="; ""; ""; ""]|]

Как вы можете видеть, мой код генерирует пустую строку!

Пожалуйста, не могли бы вы сказать мне, как я могу решить эту проблему?

1 Ответ

0 голосов
/ 05 декабря 2018

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

Чтобы проверить это, вы можете попробовать выполнить следующее:

let gen = 
  Arb.generate<string> 
  |> Gen.filter(fun (x) -> x<>null && x <>""&& x<>" ")|>Gen.nonEmptyListOf 
let res = Gen.eval 1000 (Random.mkStdGen(42L)) gen

Используя 42 в качестве начального числа, я получаю строковое значение со смещением 80, которое отображается как "",но на самом деле это невидимый персонаж.Вот интерактивная сессия F #:

> res.[80];;
val it : string = ""

> res.[80].ToCharArray();;
val it : char [] = [|'\014'|]
...