F# 记录的字段声明为私有时出现奇怪的可访问范围

2024-01-06

我刚刚注意到,当 F# 记录的字段部分被声明为私有时,出现了相当违反直觉的行为。 (这与是否可以将记录的字段设为私有?或者将记录成员设置为私有? https://stackoverflow.com/questions/12389308/is-it-possible-to-make-a-field-of-a-record-private-or-to-make-a-member-of-recor/12389894#12389894)

在这个例子中...

type MyRec = 
    private  // Fields declared private, or at least I thought so.
        { a : int
          b : int }
    member x.A = x.a
    member private x.Both = x.a + x.b
    static member CreateMyRec(a, b) = { a = a; b = b }

let foo = MyRec.CreateMyRec(1,2)
let bar = foo.a     // No error. Huh?
let baz = foo.Both  // Error: not accessible.

...私人成员Both正如预期的那样,在类型声明范围之外是不可访问的。然而,该领域a是可以访问的。

如果将 MyRec 放入模块中,这些字段将变为该模块的私有字段。这就是您期望模块中顶级声明的行为方式,但我期望类型中声明为私有的任何内容对于该类型来说都是私有的,而不是其封闭模块的私有的。

这种行为真的很奇怪吗,还是我在这里的推理中遗漏了一些东西?


据我所知,这是一个记录不足的功能。但是,规范第 10.5 节,辅助功能注释 http://research.microsoft.com/en-us/um/cambridge/projects/fsharp/manual/spec.html#_Toc335818992, 状态:

类型、模块或模块中的类型表示上的 private 意味着“模块私有”。

“类型表示”是与记录字段相关的部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

F# 记录的字段声明为私有时出现奇怪的可访问范围 的相关文章

  • F# 图表示例

    我想使用内置功能或免费库在 F 中做一些基本的图表 我会对一个非常基本的例子感到非常非常满意 如果可能的话 饼图 示例数据 John 34 Sara 30 Will 20 Maria 16 其中整数是饼图中要表示的百分比 我最近安装了 VS
  • 继续“F# 中是否存在与 C# 的 nameof(..) 等效的内容?”

    参考F 中是否存在相当于 C 的 nameof 的功能 https stackoverflow com questions 48304398 is there an equivalent of cs nameof in f 在以下情况下如何
  • 实现领域驱动设计的函数式方法

    我在使用 C 编写领域驱动应用程序方面拥有丰富的经验 我编写的应用程序越多 我就越发现我想要采用一种不太适合标准 C OO 技术的方法 我想编写尽可能多的纯函数 因为它们真的很容易测试 我想以更具声明性的方式编写我的业务逻辑 所以我一直在研
  • 在 F# 列表中键入扩展名

    假设我有一个类型 let MyType some info 但是 它通常用于列表 MyType list 所以我可以定义 let MyTypeList MyType list 有没有办法在 MyTypeList 上定义类型增强 我的实际情况
  • 如何从复合泛型类型中检索值?

    如何从泛型中检索值 具体来说 我正在尝试以下操作 Test let result Validate goodInput How to access record let request getRequest result 这是代码 type
  • Scala REPL 中的类型信息

    如果我使用 F 解释器 我可以定义一个简单的函数 如下所示 gt Function to check if x is an integer multiple of y gt let multipleOf x y x y 0 val mult
  • 不可变数据结构性能

    我不明白作为一个集合的东西怎么可能是不可变的并且仍然具有可接受的性能 根据我在 F Sets 中读到的内容 内部使用红黑树作为其实现 如果每次我们想要向红黑树添加新内容时 我们基本上都必须重新创建它 那么它如何才能具有良好的性能呢 我在这里
  • 如何统计字符串中特定字符的出现次数

    我不知道从哪里开始检查字符串中特定字符的 n 次出现 我已经列出了我认为是该功能框架的基本轮廓 但我不确定内容是什么 let countCharFromNth getStr string chkdChar char if getStr Le
  • 在 F# 中设置 ViewBag 动态对象的属性

    我在 C 中有这个操作方法 public ActionResult Index ViewBag Message Hello return View 这个视图 Index cshtml h2 ViewBag Message h2 这会在页面上
  • 使用 F# 进行循环与递归

    这里的示例代码解决了一个项目欧拉问题 从数字 1 开始 按顺时针方向向右移动 方向 5 x 5 螺旋形成如下 21 22 23 24 25 20 7 8 9 10 19 6 1 2 11 18 5 4 3 12 17 16 15 14 13
  • 如何在 x 轴上显示每个元素的标签?

    我有包含文件名和编号的元组序列 我想绘制柱形图 其中 X 轴上有文件名 我的问题是现在 X 轴下仅显示 3 个标签 文件名 这可能是因为屏幕无法容纳更多内容 还是X轴间隔错误 如何让图表显示所有文件名 也许有办法将这些标签逆时针旋转 90
  • 对 null/空值使用 bool.Parse 时出错

    我有一个使用管道运算符的表达式 该表达式将值转换为字符串 然后转换为布尔值 但有时原始值可能为空 当值为 null 时 如何使用模式匹配或其他方式假设 false type kv Dictionary
  • 如何搭建Windows Phone开发环境并使用F#开发应用程序?

    我已经下载了Windows Phone开发工具 但我不知道如何使用F 来开发应用程序 目前是C 将 F 和 Windows Phone 模板安装到 Visual Studio 中可以让生活变得更轻松 如果您打开 Visual Studio
  • 如何更改 Rx Builder 实现来修复堆栈溢出异常?

    我正在尝试提出一个 Rx Builder 以在 F 计算表达式语法中使用反应式扩展 我该如何修复它 以免堆栈崩溃 就像下面的 Seq 例子一样 是否有计划提供 RxBuilder 的实现作为响应式扩展的一部分或作为 NET Framewor
  • Async.TryCancelled 不适用于 Async.RunSynchronously

    我尝试创建一个根据用户交互更新 UI 的代理 如果用户单击按钮 则应刷新 GUI 模型的准备需要很长时间 因此希望如果用户单击其他按钮 则取消准备并开始新的准备 到目前为止我所拥有的 open System Threading type p
  • FParsec:如何组合解析器以便它们以任意顺序匹配

    任务是找到特定的键值对并解析它们 这些对可以按任何顺序出现 我的部分工作尝试 open FParsec type Parser lt a gt Parser lt a unit gt type Status Running Done typ
  • ProjectCracker 与 .netstandard 2.0 项目

    我的团队最近从使用 net 框架转向使用 net 标准 2 0 作为我们的 F 库 我们有一些在项目上运行的内部脚本来自动生成 Markdown 文档 这些脚本使用 F 编译器服务 SDK 来分析代码并检索类型元数据 文档注释等 我们正在使
  • F# 编码练习

    我一直在 Visual Studio 2010 中涉足 F 我是一名在 C 和 Java 等面向对象语言方面拥有更多代码 架构设计经验的开发人员 为了扩展我的技能并帮助做出更好的决策 我正在尝试使用不同的语言来做不同的事情 特别是掌握使用函
  • 使用 SqlBulkCopy 和 F# 在 SQL 中导出矩阵

    我想将大量数据从 F 传输到 SQL 表 基本上我的 F 代码创建了一个三列矩阵 UserID ProductID and price 和N行 我想将其 复制 粘贴 到数据库中 我尝试了多种选择 但最终 从 F 传输数据非常慢 10000
  • F# nameof 运算符不是一等函数

    我正在使用 F 4 7

随机推荐

  • 在div中显示html文件

    我一直在尝试寻找一种方法来做到这一点 因为我确信有数百个网站对此进行了解释 但我只是无法正确表达 所以我所有的搜索都得出了其他内容 如果这个问题之前已经被问过很多次了 我很抱歉 无论如何 我想做的是在 div 内加载页面 page html
  • 更新实体框架 6 中的多对多导航属性,更改未保存

    我已经抓狂了大约 2 天 因为每当我向现有实体添加多对多实体时 我根本无法让 EF 保存更改 我的结构很简单 我有一张桌子叫Person 它有一个 ID Primary identity 和一些其他字符串字段 一个表叫Keyword带有一个
  • NoSuchBeanDefinitionException 至少有 1 个有资格作为此依赖项的自动装配候选者的 bean

    我对 Spring 框架有问题 我一直在寻找解决方案 但没有任何结果 当我部署应用程序时 出现异常 14 11 2012 0 37 23 org apache catalina core ApplicationContext log INF
  • Nhibernate 与其他 ORM 有何不同?

    除了开源和成熟这一事实之外 还有哪些差异化因素可以将它们区分开来 冬眠来自其他 net ORM 框架 例如Subsonic ADO NET 实体框架 etc 更准确地说 为什么我应该选择 nhibernate 而不是其他 net 实体框架
  • Eclipse 不会将项目识别为库(ActionBarSherlock/ViewPagerIndicator)

    我想得到动作栏夏洛克 http actionbarsherlock com 和查看寻呼指示器 http viewpagerindicator com 为我的项目设置的库 但我似乎遇到了一些问题 我早些时候向杰克 沃顿 Jake Wharto
  • C# HttpWebRequest - 使用 Gzip 压缩

    我有一个程序可以生成大量 HttpWebRequest 并且我读到了有关使用 gzip 压缩来加速响应数据下载的内容 我知道 gzip 是什么以及它如何工作 但我不知道它在 C 中如何工作 假设我有一个简单的 GET 请求 HttpWebR
  • Folium 地图在 Spyder 中不显示

    标题说明了一切 我无法让 Spyder 显示地图folium 这是我得到的 import folium m folium Map location 45 5236 122 6750 m 没有错误 也没有地图 只是这样 m render No
  • 为什么要把 try/catch 块放在循环之外?

    这是实践与模式团队的代码审查指南 http msdn microsoft com zh cn library ms998574 scalenetchapt13 topic7 http msdn microsoft com zh cn lib
  • jQuery - 拖动时停止悬停事件

    我正在创建一个拖放图像环境 如果您将鼠标悬停在图像上 则会在其上方弹出一个小菜单 如果单击并拖动图像 可以对它们重新排序 我遇到的问题是 我希望在拖动时禁用悬停事件 目前 如果您拖动图像 它会触发您悬停在其上的其他图像上的所有悬停菜单 ul
  • 在休眠应用程序中设置字节码提供程序的问题

    我正在尝试添加 cglib 作为默认字节代码提供程序 我在用hibernate cfg xml文件来配置会话工厂
  • 应用程序在 Activity 中抛出 java.lang.StackOverflowError 异常

    我正在开发一款 Android 应用程序 在我的一项活动中 我使用 PullToRefreshListView 有时我得到java lang StackOverflowError 错误我的活动例外 我尝试修复它 我也在谷歌上搜索 但没有得到
  • 我如何发现我的delphi应用程序当前是否有模式窗口?

    我在 Delphi MDI 应用程序中运行了一个计时器 如果后台发生变化 我想用它弹出一条消息 但我不希望当应用程序在前台有模式对话框时弹出该消息 因为用户对此无能为力 那么我想知道如何检查我的应用程序中是否存在模式对话框 您可以尝试使用以
  • 如何克隆文件名中带有冒号的文件

    当我使用 msysgit 克隆存储库时 所有文件名中带有空格的文件都不会被删除 然后在状态中显示为已删除 文件名看起来像这样 styles ie 1 12 11 6 02 PM css所以它实际上可能是冒号或括号 如何获取这些文件以使我的本
  • Reactjs 淡入淡出 div 与内联样式

    我怎样才能添加一个fade in动画到 div fading in text div 仅使用内联样式 class Practise extends Component state show false componentDidMount s
  • 在张量流中解包(unstack)具有一个 None 维度的输入(占位符)

    我正在尝试将 LSTM 与具有不同时间步长 不同帧数 的输入一起使用 rnn static rnn 的输入应该是 tf 序列 不是 tf 所以 我应该将我的输入转换为序列 我尝试使用 tf unstack 和 tf split 但它们都需要
  • cocoapods activesupport冲突ios开发

    我尝试在 cocoapods 项目上报告此问题 但被指示在此处发布 我最近承担了一个工作项目 但我无法让以前的顾问设置在我的本地工作站上运行 然而 当我运行时 我能够成功安装 cocoapods gempod install它爆炸了 spe
  • Django modelform:是否可以内联添加相关模型?

    我真的希望这不是重复的 我找不到任何东西 但这可能意味着我不擅长搜索 我有一个 Django 应用程序 并且工作人员已经在使用管理应用程序来 嗯 管理目的 我还为特定模型创建了一个快速数据输入页面 基本上是通过在基本模板中放置模型表单来创建
  • 为什么“git describe”在我的干净 git 存储库副本上显示较旧的标签版本?

    一些背景 我目前有两个本地 git 存储库 它们指向相同的源 主项目 我有两个 git 存储库的原因是 我有一个干净的主副本 我可以在需要时使用 还有一个副本 我可以在沙箱中应用更改 提交等 这可能有点矫枉过正 但有一些优点对我个人来说 有
  • 模型更改时角度视图(DOM 元素)不会更新

    在最新稳定的 Chrome 中运行最新稳定版本的 Angular 我对位于 ng 控制器 A 的视图内的 DOM 元素进行了 ng click 但 DOM 元素本身的 ng controller 设置为another控制器 B ng cli
  • F# 记录的字段声明为私有时出现奇怪的可访问范围

    我刚刚注意到 当 F 记录的字段部分被声明为私有时 出现了相当违反直觉的行为 这与是否可以将记录的字段设为私有 或者将记录成员设置为私有 https stackoverflow com questions 12389308 is it po