f# - 强制 F# 类型的字段为空

标签 f# null option

我很了解 option 的好处,但在这种情况下,我想避免使用 option出于性能原因。 option在一个类中包装一个类型,这意味着垃圾收集器需要做更多的工作——我想避免这种情况。

特别是在这种情况下,我有多个字段都是 Some在相同的情况下,但我不想把它们放在一个元组中,因为元组也是类——并且给 GC 带来了额外的压力。所以我最终访问了field.Value -- 这违背了 option 的目的.

所以除非有我不知道的优化导致option类型被视为可能为空的引用,我只想使用 null .有没有办法我可以做到这一点?

编辑:为了扩展我正在做的事情,我正在制作 bounding volume hierarchy ,它实际上是一棵二叉树,数据仅在叶节点处。我将它作为一个类而不是作为一个受歧视的联合来实现,因为出于性能原因保持项目不可变不是一种选择,并且受歧视的联合不能有 mutable成员(member),仅限 ref s - 再次增加 GC 压力。

尽管在函数式语言中很愚蠢,但我最终可能只是将每个节点类型都作为 Node 的继承。父类型。 Downcasting并不是最快的操作,但就 XNA 和 WP7 而言,几乎任何事情都比激怒 GC 更好。

最佳答案

根据this MSDN documentation , 如果你用 [<AllowNullLiteral>] 装饰你的类型属性,然后您可以调用 Unchecked.defaultof<T>()为您构建一个空值。

这似乎是 F# 中做你想做的事的唯一方法。否则,你可以编码到另一种 .net 语言并从那里得到空值......但我猜这根本不是你想要的

关于f# - 强制 F# 类型的字段为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8707042/

相关文章:

java - 为什么在参数为 null 时抛出 NullPointerException?

ruby-on-rails - 如何选择f.select rails

performance - F# 处理复杂键(如数据结构中的 int*int*int)比 Ocaml 慢得多

sql-server - 在 SQL Server 的 OPENXML 函数中将空元素视为空值

c# - 从 C# 代码内部访问 F# List<List<>>

php - 将 null 转换为字符串

ruby-on-rails - 如何从 Rails 4.0.2 Controller 中的选择标签中获取所选选项

css - Firefox CSS选择OPTION样式

mysql - SQLProvider 不适用于任何数据库类型。没有来自 SqlTypeProvider [F#][macOS] 的类型

f# - F# 中的教会数字