gpt4 book ai didi

polymorphism - 榆树中的多态记录类型

转载 作者:行者123 更新时间:2023-12-03 11:10:15 26 4
gpt4 key购买 nike

榆树市可能存在以下情况?

func : a -> {a | id : Int}
func x = { x | id = 123 }


由于 a的多态性太强,因此无法编译。它认为可以是任何东西,包括非记录类型。我如何告诉编译器 a是记录类型,但是我们不知道其中的任何字段? (老实说,尽管 {a | id : Int}就足够了)。

我努力了...

type alias Record a = {a}
func : Record a -> { a | id : Int }

func : {a} -> {a | id : Int}
func x = { x | id = 123 }


两者均因语法错误而失败。可以对Elm说“这种类型是唱片,但我什么都不知道”吗?

要解决以下问题,请执行以下操作:


如果它是没有任何特定字段的记录,那么您将无法像它一样做任何记录,因此似乎无法表达它。


在我的示例中,我尝试对未知字段进行记录类似的记录,因此说对它们无能为力是不正确的。


您无法将字段动态添加到记录中。


我没有在记录中动态添加字段,而是在创建一条与现有记录匹配的新记录,只是它具有一个值为 id123字段。


那不是记录所做的事情,可能是因为如果已经有一个id字段,那将真的很尴尬。


这似乎是您推理的真实内容,但我认为这并非令人信服。为什么那会很尴尬?似乎以这种方式工作是迄今为止最明显的工作方式?


如果这不是您想要的,那么看来这是XY问题的一种情况


顺便说一句,但是每次我遇到Elm字体系统的烦恼/弱点时,某种程度上我的错就不是Elms了。

最佳答案

不,Elm无法通过类型注释来指明类型是记录而不指定任何字段。但是,即使没有类型注释,Elm也没有语法可以执行您想要的操作。 { a | id = 123 }是记录更新语法,它不支持在记录中添加字段(并且从Elm 0.19开始,也不支持更改字段的类型)

据我所知,Elm没有允许您生成带有附加字段的记录副本的语法。

关于polymorphism - 榆树中的多态记录类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52416914/

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