【问题标题】:Is F# case sensitive?F# 区分大小写吗?
【发布时间】:2010-09-17 23:41:55
【问题描述】:

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

我问的原因是,由于 F# 约定似乎偏爱非大写字母,因此在 F# 中使用带有 Pascal 约定的 BCL 类型看起来很奇怪,如下所示:

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

似乎更符合 F# 的精神:

let stringD = string.join(" ",[| stringA; stringB |])

【问题讨论】:

    标签: f# case-insensitive case-sensitive


    【解决方案1】:

    好的,有几件事。

    首先,F# 区分大小写。

    其次,F# 命名约定在F# Component Design Guidelines 中进行了描述。简而言之,F# 模块中的 let-bound 成员使用 camelCase,但所有 .NET OO 构造都使用 PascalCase。在整个 F# 库中都是如此。

    最后,在 F# 中,string 不是关键字,而是type abbreviation 的名称(用于System.String)和function 的名称(转换为字符串)。在string.Join 的表达式上下文中,函数名优先,这就是string.Join 不起作用的原因。而且由于区分大小写,System.String.join 永远不会起作用(除非您添加了扩展成员)。

    【讨论】:

    • 感谢惊人的回答。如果你不介意的话,看起来我会在这里问你很多 F# 问题:O
    【解决方案2】:

    是的,F# 区分大小写

    let stringD = string.join(" ",[| stringA; stringB |])
    

    不会工作。

    【讨论】:

      【解决方案3】:

      令人惊讶的是,the F# Language Specification 没有明确提及区分大小写,但确实提到了对内在函数/语言和用户定义的类型参数使用不同的大小写 (5.1.2)

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

      【讨论】:

      • 好的,我可以理解在 String 中找不到 Join,但在 C# string 或 String 中可以访问它的成员。为什么这在 F# 中不起作用?这是 C# 背后的一些 IDE 魔法吗?
      • 在 C# 中,'string' 是一个关键字,意思是 'System.String'。在 F# 中,'string' 是函数的名称以及类型别名,而不是关键字。
      猜你喜欢
      • 2014-12-17
      • 2023-03-25
      • 1970-01-01
      • 2012-10-03
      • 2011-09-24
      • 2017-10-19
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多