gpt4 book ai didi

f# - 如何检查函数的类型参数是否静态解析?

转载 作者:行者123 更新时间:2023-12-04 20:00:59 25 4
gpt4 key购买 nike

非常简单的例子:

  1. 让 myfun x = x
    在智能感知中,它说“x: 'a -> 'a”。在 FSI 中它说“x: 'a -> 'a”
  2. 让内联 myfun x = x
    在智能感知中,它说“x: 'a -> 'a”。在 FSI 中它说“x: 'a -> 'a” <<<< 为什么不 ^a?
  3. 让内联 myfun (x: 'b) = x
    在智能感知中,它说“x: 'b -> 'b”。在 FSI 中它说“x: 'b -> 'b”
  4. 让内联 myfun (x: ^b) = x
    在智能感知中,它说“x: 'b -> 'b”。在 FSI 中它说“x: ^b -> ^b” <<<< different

由于智能感知从不显示 ^b,我是否应该寻找 ^b 作为 FSI 中“静态解析”的指示符?

inline 是否保证“静态解析”?

最佳答案

Inline 确实允许但不强制静态解析类型,这就是情况 2 的原因。它与情况 1 保持相同。我认为在大多数情况下,类型推断足够聪明,可以猜测类型是否真的应该静态解析,即使您没有指定 ^

例如,如果在情况 3 中将函数体更改为 sqrt x。您将得到

> let inline myfun (x: 'b) = sqrt x;;
val inline myfun : ^b -> ^a when ^b : (static member Sqrt : ^b -> ^a)

我个人总是尽量不在第一次尝试时明确指定类型,然后我检查我是否对推理满意,如果不满意,我会尝试添加内联,但不添加帽子类型。

为什么智能感知有时会显示不同的东西?这可能是一个小错误。

关于f# - 如何检查函数的类型参数是否静态解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16327655/

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