是否有一种不那么冗长的方式来打开只有一个标签的类型?

问题描述 投票:0回答:2

是否有一种不那么冗长的方式来打开只有一个标签的类型,例如目前我做case myObject of TheTag arg -> foo,但我认为编译器应该足够聪明,知道只有一种可能性,对吗?

pattern-matching elm algebraic-data-types
2个回答
4
投票

没有内置的编译器快捷方式,无需从单构造函数类型“解包”有效负载。您始终可以为此目的定义getter函数以避免case语句:

getTagArg (TheTag arg) = arg

然后当你需要在代码中使用它时,你只需要调用getTagArg myObject而不是case语句。


2
投票

编译器很聪明,知道只有一种可能性,但仍然需要区分包装和未包装的值,因为它们至少是不同的类型。

单个标记自定义类型可以在任何可以使用模式的地方解包,或者更准确地解构,就像解构记录或元组时一样。

您可以在case表达式中解析它,如您所示,以及作为函数参数

myFunction (TheTag arg) = ...

但也是一个让绑定

let TheTag arg = myObject in ...

如果您尝试使用具有多个标记的自定义类型执行此操作,编译器将告诉您“此模式未涵盖所有可能的值”。但是如果类型只有一个标记,它可以正常工作,因为它确实涵盖了所有可能的值,并且编译器足够智能以识别它。

© www.soinside.com 2019 - 2024. All rights reserved.