"在 F# 理解中被弃用?-6ren"> "在 F# 理解中被弃用?-有时在书中我看到 F# 中列表和序列推导式的这种语法: seq { for i = 0 to System.Int32.MaxValue -> i } 这是来自 Programming F# by C-6ren">
gpt4 book ai didi

f# - 为什么 "->"在 F# 理解中被弃用?

转载 作者:行者123 更新时间:2023-12-04 11:15:49 24 4
gpt4 key购买 nike

有时在书中我看到 F# 中列表和序列推导式的这种语法:

seq { for i = 0 to System.Int32.MaxValue -> i }

这是来自 Programming F# by Chris Smith ,第 80 页。在 VS2010 附带的 F# 中,这不会编译。我相信 ->已被弃用。 (见 Alternative List Comprehension Syntax)。然而, ->仍然可以用于涉及范围的推导式:
seq { for c in 'A' .. 'Z' -> c }

根据 Expert F# 2.0 ,第 58 页,这是因为 ->Seq.map 的简写超过一个范围。
  • 为什么->的第一次使用以上已弃用?
  • 当前使用->似乎不一致。任何人都可以为我调和吗?
  • 最佳答案

    ->构造仅在“简单”序列表达式语法中受支持,您使用以下结构对某些数据源进行投影 ( Seq.map ):

    seq { for <binding> in <input> -> <projection> }

    你提到的第一个例子是使用 for .. to ..这是与 for .. in 不同的句法结构,但您可以使用第二个重写它(实际上,我在编写序列表达式时几乎总是使用 for .. in):
    seq { for i in 0 .. System.Int32.MaxValue -> i }

    在所有其他形式的序列表达式中,您必须使用 yield .在早期版本的 F# 中, ->语法等价于 yield (还有 ->> 相当于 yield! )。例如,您可以编写:
    seq { -> 10              // You need 'yield' here
    ->> [ 1; 2; 3 ] } // You need 'yield!' here

    这个语法看起来很奇怪,所以我认为弃用这两个的主要原因是为了保持语言的一致性。相同的计算表达式语法用于序列表达式(其中 -> 有意义),但也用于其他计算类型(您可以定义自己的),其中 yield感觉更合适(并且它也对应于异步工作流或其他计算表达式中的 return)。

    “简单”特定于序列的语法仍然有用,因为它可以为您节省一些输入(您将 do yield 替换为 -> ),但在更复杂的情况下,您不会保存那么多字符,我认为使用 -> 的语法& ->>看起来有点神秘。

    关于f# - 为什么 "->"在 F# 理解中被弃用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4112043/

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