F# 类型如何转移到 C#?

发布于 2024-09-25 22:11:49 字数 204 浏览 5 评论 0原文

如果在 F# 中我有这样的方法:

drawBox
drawSphere
paintImage

它们是否会转移到 C#,完全相同?

如果是这样的话,那么它是否会损害 C# 中的命名约定(其中方法应该采用 PascalCase)?

或者我应该在 F# 中使用 PascalCase 来解决这个问题?

If in F# I have methods like:

drawBox
drawSphere
paintImage

Would they be transferred to C#, exactly the same?

If that's the case, then wouldn't it compromise the naming conventions in C#, where methods are supposed to be PascalCase?

Or should I make them PascalCase in F# as well to remedy this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

放手` 2024-10-02 22:11:49

您应该遵循 F#组件设计指南

值得注意的部分是:

  • 对于面向对象的代码,包括面向 F# 的库,请使用 .NET 命名和大小写约定。
  • 请对 F# 模块中的公共函数和值使用 PascalCase 或 CamelCase。
    驼峰命名法通常用于设计为不合格使用的公共函数(例如invalidArg),以及“标准集合函数”(例如List.map)。在这两种情况下,函数名称的作用非常类似于语言中的关键字。

另一种划分方式:

  • 成员类型应该始终是PascalCase,就像
  • 模块中的C# let-bound 实体可以是camelCase 一样,但这些东西通常不是你的东西。 d 从旨在供 C# 使用的库中公开公开

You should follow the F# Component Design Guidelines.

The notable parts are:

  • Do use the .NET naming and capitalization conventions for object-oriented code, including F#-facing libraries.
  • Do use either PascalCase or camelCase for public functions and values in F# modules.
    camelCase is generally used for public functions which are designed to be used unqualified (e.g. invalidArg), and for the "standard collection functions" (e.g. List.map). In both these cases, the function names act much like keywords in the language.

Another way to slice it:

  • members and types should always be PascalCase, just like C#
  • let-bound entities in modules can be camelCase, but this stuff is typically not stuff you'd expose publicly out of a library that is intended to be consumed by C#
奈何桥上唱咆哮 2024-10-02 22:11:49

正如其他人已经指出的那样,编译成员的名称与您在 F# 代码中编写的名称完全相同。一般来说,声明类时遵循标准 C# 命名约定是个好主意。声明 F# 模块时,您可以使用 camelCase(特别是对于面向 F# 用户的模块)或 PascalCase(如果您想在 C# 中使用它们)。

此外,您还可以使用一个技巧(该技巧在 F# 核心库中用于 List.map 等实际编译为 List.Map 的函数)。您可以使用 CompiledName 属性来指定编译版本中的名称:

module Bar = 
  [<CompiledName("Foo")>]
  let foo a = a + 1

使用统一的命名约定可能更好,但如果您想为 F# 用户和标准 .NET 保留一个漂亮的短名称对于 C# 用户来说,这是一个有趣的选项。

As others already pointed out, the names of compiled members are exactly the same as the names you wrote in the F# code. In general, it is a good idea to follow standard C# naming conventions when declaring classes. When declaring an F# module then you can either use camelCase (especially for modules that are intended for F# users) or PascalCase if you want to use them from C#.

Also, there is one trick that you can use (this is used in the F# core library for functions like List.map that are actually compiled as List.Map). You can use the CompiledName attribute to specify the name in the compiled version:

module Bar = 
  [<CompiledName("Foo")>]
  let foo a = a + 1

It is probably better to use a unified naming convention, but if you want to keep a nice short name for F# users and standard .NET name for C# users, this is an interesting option.

皇甫轩 2024-10-02 22:11:49

F# 和 C# 中的类型方法名称相同。如果您希望在 C# 中使用 PascalCase - 您应该在 F# 中使用此命名约定,与驼峰命名法相同。

type methods names will be the same both in F# and C#. if you want PascalCase in C# - you should use this naming convention in F#, the same with camelCase.

↙温凉少女 2024-10-02 22:11:49

命名约定是针对人类的。编译器和运行时实际上并不关心每个变量名称是否完全不可读,它们仍然可以工作。

Naming conventions are for humans. Compilers and runtimes really don't care if every variable name is entirely unreadable, they'll still work.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文