Получение пустого значения в генераторе F#
У меня проблема с этим кодом, я попытался сгенерировать список непустой строки следующим образом:
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 ответ
Решение
Я думаю, что результат, который вы получите, на самом деле не содержит пустую строку, но вместо этого содержит строку с невидимым символом.
Чтобы проверить это, вы можете попробовать выполнить следующее:
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'|]