这里我有一个简单的二进制搜索树类型:
type Tree<'k,'v> =
| EmptyTree
| TreeNode of 'k * 'v * Tree<'k,'v> * Tree<'k,'v>
在C#中,如果我们有一个名为Tree的类,我们可以编写
List<Tree> tree = new List<Tree>()
但是如何在F#中声明Tree类型的列表?
这里我有一个简单的二进制搜索树类型:
type Tree<'k,'v> =
| EmptyTree
| TreeNode of 'k * 'v * Tree<'k,'v> * Tree<'k,'v>
在C#中,如果我们有一个名为Tree的类,我们可以编写
List<Tree> tree = new List<Tree>()
但是如何在F#中声明Tree类型的列表?
在C#示例中,您使用的不是通用的 app.use(express.static('./client/build'))
app.get('*',(req,res)=> {
res.sendFile(path.join(__dirname,'client','build','index.html'))
})
类型-大概是包含特定类型的键和值的类型。相反,您的F#Tree
类型是通用类型,这意味着如果要使用它,则必须指定要用作键和值的类型。
这意味着如果要创建树列表,则需要确定键和值的类型。 Tree<'k,'v>
的F#名称是List
,因此您可以编写如下内容:
ResizeArray
在某些情况下,您可以编写通用的代码,而无需指定类型。例如,您可以编写一个函数来创建两个单例树的列表:
let tree = new ResizeArray<Tree<string,int>>()
通常,您实际上不需要编写这样的代码。如果使用F#列表而不是let twoSingletons k v =
let res = new ResizeArray<Tree<string,int>>()
res.Add(TreeNode(k,v,EmptyTree,EmptyTree))
res.Add(TreeNode(k,EmptyTree))
res
,则可以使用ResizeArray
表示法构造列表,而不必担心显式指定类型。类型推断可解决以下问题:
[ .. ]