gpt4 book ai didi

f# - 是否可以在 F# 的函数范围内声明类型?

转载 作者:行者123 更新时间:2023-12-04 07:27:57 25 4
gpt4 key购买 nike

假设我有一个功能非常复杂,它是在子功能的帮助下实现的。为了让事情变得更容易,我想使用一些中间结构来代替元组,这些结构对于这个函数的实现来说是私有(private)的。

我不希望这些结构的声明泄漏到外面。所以我想要这样的东西:

let someComplexFun p =
type SomeRecord = {i:int; x:int; y:int;}
type SomeOtherRecord = {...}

let innerFunctionA (x:SomeRecord) = ...
let innerFunctionB (x:SomeOtherRecord) = ...

...

我试过了,但编译器当然不允许我这样做。我查看了文档,但在任何地方都看不到必须在模块级别声明类型。

例如,在 LISP 中,这似乎都是完全合法的,例如:
(defun foo (when)
(declare (type (member :now :later) when)) ; Type declaration is illustrative and in this case optional.
(ecase when
(:now (something))
(:later (something-else))))

那么,我错过了什么吗?如果 F# 这可能吗?

最佳答案

要验证根据规范这是不允许的,请查看规范中 F# 表达式的语法:Section 6: Expressions .它列出了可以用来代替 expr 的各种结构。它们都不是类型声明type-defn (在 Section 8: Type Declarations 中描述)。

函数声明的(简化)语法是 let ident args = expr ,因此主体必须是表达式(并且您不能在表达式中声明类型)。

关于f# - 是否可以在 F# 的函数范围内声明类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7190722/

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