gpt4 book ai didi

f# - 在 F# 中键入名称作为标识符

转载 作者:行者123 更新时间:2023-12-01 04:37:52 25 4
gpt4 key购买 nike

刚开始学F#,不小心写了这个绑定(bind)

let List = 1

现在,当我尝试获取“过滤器”等 List 方法时,出现此错误

error FS0039: The field, constructor or member 'filter' is not defined.

当然,使用具有完整类型名称的方法,如 Microsoft.FSharp.Collections.List.filter 仍然有效。

我想知道为什么可以在 F# 中使用类型名称作为标识符,以及如何将名称 List 设置为从 Microsoft.FSharp.Collections 键入 List。

当我尝试像这样重新分配时

type List = Microsoft.FSharp.Collections.List<'T>

我明白了

Error FS0039: The type parameter 'T is not defined.

谢谢!

最佳答案

在 F# 中,您几乎可以重新定义所有内容并隐藏现有定义。这适用于两种类型(实际上,类型在遮蔽方面有不同的行为,它们会在您打开命名空间时遮蔽它们的值)和值,但不能互换,因为值和类型(以及模块)可以以某种方式在范围内同时共存.编译器会尽力找出是哪一个。

您并非被迫这样做,但在 F# 中,不使用大写的 let 绑定(bind)是一种常见的良好做法。

关于你的第二个问题,你在右侧使用了一个类型参数,它在赋值的左侧不存在,它应该是:

type List<'T> = Microsoft.FSharp.Collections.List<'T>

但请注意 filter 不属于该类型。它是在 List 模块中定义的。

关于f# - 在 F# 中键入名称作为标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47044004/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com