gpt4 book ai didi

f# - F# 中的签名文件和访问修饰符

转载 作者:行者123 更新时间:2023-12-04 06:50:58 24 4
gpt4 key购买 nike

我最近一直在尝试学习 F# 的面向对象方面,并且对如何限制对语言中类型/模块的访问感到好奇。

更具体地说,我想知道写这个之间的区别:

例子.fsi

module Stack =
val foo : string

例子.fs
module Stack =
let foo = "foo"
let bar = "bar"

或者这个:
module Stack =
let foo = "foo"
let private bar = "bar"

他们最终不会完成完全相同的事情吗?来自 C# 背景,我更倾向于使用访问修饰符而不是签名 (FSI) 文件。它们似乎更通用(例如,可以应用于命名空间中的模块/类型),而我没有在任何情况下签名文件提供访问修饰符不提供的东西。

最佳答案

他们完成几乎相同的事情。 (请注意,您也可以将 .fsi 文件用于命名空间中的类型,不确定您对此的评论是什么意思。)

签名文件有几个优点:

  • 您可以制作实体public在文件的持续时间内,但随后 private到项目的后续文件。
  • 您可以在签名文件中仅包含简短摘要,因此无需扫描大量代码即可轻松阅读公共(public)界面。

  • 第一个要点不容小觑——像这样的组件内封装实际上对于非常大的项目来说是一个相当大的功能。能够在 File1.fs 中定义一些相互公开的类型,但只有这些类型/方法的子集对其余类型(File2.fs、File3.fs 等)是公开的,这是非常有用的(有点像 C++ 中的“ friend ”)。

    关于f# - F# 中的签名文件和访问修饰符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1526902/

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