这是一个片段,展示了我会很好地谈论的内容:
open FsCheck
open FsCheck.Gen
open FSharp.Data
type Test = JsonProvider<"""{"collection": [ { "Name": "Rob", "Age": 3 } ] } """>
let testGen () =
gen {
let! name = Arb.generate<string>
let! age = Arb.generate<int>
let colObj = Test.Collection(name, age)
return Test.Root([|colObj|])
}
let specialTestGen () =
gen {
let! test = testGen ()
let item = test.Collection.[0]
let foo = item.Name
let changedItem = {item with Name = "Chris"}
return {test with test.collection = [|changedItem|]}
}
我正在尝试通过不断产生的某些领域来创造一个一代。我可以将集合实例的名称分配给foo,但是由于某种原因,我无法构造该结构的另一个经过稍微修改的版本。它告诉我item没有名为Name的属性,当它清楚地位于它之前的那一行时,它确实存在。由于某种原因,我可以不使用这些库的“with”语法吗?
最佳答案
类型提供者现在只能提供普通的.NET类型,不能提供F#记录和有区别的联合。 {x with ...}
语法仅适用于F#记录。