2015-04-02 52 views
0

我是编程新手,F#是我的第一语言。F#:保存JSON数据

这里是我的代码的相关部分:

let internal saveJsonToFile<'t> (someObject:'t) (filePath: string) = 
    use fileStream = new FileStream(filePath, FileMode.OpenOrCreate) 
    (new DataContractJsonSerializer(typeof<'t>)).WriteObject(fileStream, someObject) 

let testList = new List<Fighter>() 

saveJsonToFile testList<Fighter> @"G:\User\Fighters.json" 

我以前创建的类型战斗机的F#记录。

当我尝试运行“saveJsonToFile testList @”G:\ User \ Fighters.json“”,“testList”被强调为红色并显示错误消息:“Unexpected type arguments”。

出了什么问题?我错过了什么?

回答

1

首先,您的testList的值,而不是函数。其次,它没有泛型参数,它的正文中的所有内容都是具体的。

如果你想让它成为一个函数,给它一个参数。
如果您希望它是通用的,请在正文中说明。

let testList() = new List<'a>()
saveJsonToFile testList<Fighter>() @"G:\User\Fighters.json"

最后,你想可能创造List解析为F#自己的List,这是一个模块,而不是一个类型。
如果你的意思是创建.NET的System.Collections.Generic.List,那么你需要指定完整的类型名称:

let testList() = new System.Collections.Generic.List<'a>()

但如果你的意思是创建F#本地列表,使用它的构造函数:

let testList() = []

+1

而是'新System.Collections.Generic.List <'a>()',你可以使用'新ResizeArray <'a>的()'。另外,'[]'不是构造函数;这是一个价值。试试这个:'System.Object.ReferenceEquals([],[])' – phoog 2015-04-02 18:13:14

+0

@phoog http://tryfs.net/snippets/snippet-qm – 2015-04-02 19:12:13

+0

我不明白你的观点。当然,如果它们的类型不同,它们的情况就不一样了。 – phoog 2015-04-02 20:38:41