F#是区分大小写的吗?

6

我在这里和网络上搜索了,但没有答案。

我提出这个问题的原因是,由于 F# 的惯例似乎偏向于小写字母,所以在 F# 中使用带有 Pascal 惯例的 BCL 类型看起来很奇怪,例如:

let stringD = String.Join(" ",[| stringA; stringB |])

似乎这样更符合 F# 的精神:
let stringD = string.join(" ",[| stringA; stringB |])
3个回答

9

好的,有几个事情需要注意。

首先,F# 是大小写敏感的。

其次,F# 命名约定在 F# 组件设计指南 中有描述。简单来说,在 F# 模块内部使用 camelCase 来绑定成员,但所有 .NET 的面向对象构造都使用 PascalCase。这一点适用于整个 F# 库。

最后,在 F# 中,string 不是关键字,而是一个 类型缩写(表示 System.String)和一个 函数(将其转换为字符串)的名称。在 string.Join 的表达式上下文中,函数名称优先,这就是为什么 string.Join 无法正常工作的原因。并且由于大小写敏感性,System.String.join 也永远不会起作用(除非您添加了扩展成员)。


谢谢您的惊人回答。看起来我在这里会向您询问很多F#的问题,如果您不介意的话 :O - Joan Venge

2
是的,F#对大小写敏感。
let stringD = string.join(" ",[| stringA; stringB |])

无法工作。


1

令人惊讶的是,F#语言规范并没有明确提到大小写敏感性,但是在intrinsics/language和用户定义的类型参数中使用不同的大小写(5.1.2)。

虽然我的F#经验有限(除了Hello World式的应用程序),我会认为string.join不会绑定到String.Join


我可以理解在C#中使用string或String来访问其成员,但是在F#中为什么不起作用呢?这是C#背后的一些IDE魔法吗? - Joan Venge
3
在C#中,“string”是一个关键字,意思是“System.String”。而在F#中,“string”既是函数的名称,也是类型别名,不是关键字。 - Brian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接