gpt4 book ai didi

F# 高阶属性访问器

转载 作者:行者123 更新时间:2023-12-01 01:03:06 24 4
gpt4 key购买 nike

我刚刚将我的原型(prototype)元组升级为记录。有朝一日,它可能会成为一堂真正的课。同时,我想翻译这样的代码:

type Example = int * int
let examples = [(1,2); (3,4); (5,6)]
let descs = Seq.map (fst >> sprintf "%d") examples

到这里:

type Example = {
Field1 : int
Field2 : int
Description : string
}
let examples = [{Field1 = 1; Field2 = 2; Description = "foo"}
{Field1 = 3; Field2 = 4; Description = "bar"}
{Field1 = 5; Field2 = 6; Description = "baz"}]
let descs = Seq.map Description examples

问题是,当我声明示例记录时,我希望得到一个函数 Description : Example -> string,但我没有。我已经四处寻找并尝试了类的属性,但这也不起作用。我只是在文档中遗漏了一些东西,还是必须手动编写高阶访问器? (这就是我现在使用的解决方法。)

最佳答案

我同意在 F# 中使用某种方式将实例成员用作函数值会很好(无需显式构造 lambda 函数)。这实际上已经在 F# 社区中讨论过几次。这是一个相关链接:

该讨论中的一些建议选项是:

// This would turn '_' automatically into a lambda parameter
// (this looks okay in simple cases, but doesn't probably scale well)
examples |> Seq.map (_.Description)

// You would specify instance member using special '#' symbol
examples |> Seq.map (Example#Description)

所以,这是 F# 团队意识到的事情,但我认为这是否真的是那么重要的特性以及支持它的最佳方式是什么,尚无定论。

关于F# 高阶属性访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2992992/

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