【发布时间】:2015-11-26 15:04:35
【问题描述】:
我有这个记录:
type Client =
{ Name : string; Income : int ; YearsInJob : int
UsesCreditCard : bool; CriminalRecord : bool }
要为此记录创建生成器,我尝试了以下代码:
let chooseFromList xs =
gen {
let! idx = Gen.choose(0, List.length xs - 1)
return (List.nth xs idx)
}
let generateName = (Gen.oneof [ gen {return "A"};gen {return "B"};gen {return "C"}])
let generateIncome= (chooseFromList [0..5000])
let generate_YearsInJob= chooseFromList [0..45]
let generate_UsesCreditCard = (Gen.oneof [ gen { return true }; gen { return false } ])
let generate_UsesCriminalRecord= (Gen.oneof [ gen { return true }; gen { return false } ])
let genertate_Client =
{
Name= generateName;
Income=generateIncome;
YearsInJob=generate_YearsInJob
UsesCreditCard=generate_UsesCreditCard
CriminalRecord=generate_UsesCriminalRecord
}
问题在于Name= generateName; 我遇到了错误:
This expression was expected to have type string,but here has type Gen<string>
这个错误存在于最后一行。
【问题讨论】:
-
修复名称的类型?或者问它的第一个值?还是用所有东西构建一个字符串?或者也许 OneOf 字符串(而不是生成器,每个生成不同的字符串)?错误就是它所说的:生成器不是字符串。