在 F# 生成器中获取空值
Getting empty value in F# generator
我对这段代码有疑问,我试过像这样生成非空字符串列表:
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:<="; ""; ""; ""]|]
如您所见,我的代码正在生成空字符串!
你能告诉我如何解决这个问题吗?
我认为你得到的结果实际上并不包含一个空字符串,而是包含一个带有不可见字符的字符串。
要对此进行测试,您可以尝试 运行 以下操作:
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 [] = [|'4'|]
我对这段代码有疑问,我试过像这样生成非空字符串列表:
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:<="; ""; ""; ""]|]
如您所见,我的代码正在生成空字符串!
你能告诉我如何解决这个问题吗?
我认为你得到的结果实际上并不包含一个空字符串,而是包含一个带有不可见字符的字符串。
要对此进行测试,您可以尝试 运行 以下操作:
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 [] = [|'4'|]