gpt4 book ai didi

syntax - OCaml 构造函数解包

转载 作者:行者123 更新时间:2023-12-04 17:38:35 24 4
gpt4 key购买 nike

是否可以通过将类型的数据绑定(bind)到单个值而不是元组来解包类型?

# type foo = Foo of int * string;;
type foo = Foo of int * string
# Foo (3; "bar");;
Foo (3; "bar");;
Error: The constructor Foo expects 2 argument(s),
but is applied here to 1 argument(s)
# Foo (3, "bar");;
- : foo = Foo (3, "bar")

# (* Can this possibly work? *)
# let Foo data = Foo (3, "bar");;
let Foo data = Foo (3, "bar");;
Error: The constructor Foo expects 2 argument(s),
but is applied here to 1 argument(s)

# (* Here is the version that I know works: *)
# let Foo (d1, d2) = Foo (3, "bar");;
val d1 : int = 3
val d2 : string = "bar"

这在语法上可能吗?

最佳答案

这是 OCaml 语法的一个棘手部分。如果你定义你的类型,它的构造函数 Foo期望括号中的两个值。它总是必须是两个值,而不是一个元组的单个值。

如果你愿意使用不同的类型,你可以做一些更像你想要的事情:

# type bar = Bar of (int * string);;
type bar = Bar of (int * string)
# let Bar data = Bar (3, "foo");;
val data : int * string = (3, "foo")
# let Bar (d1, d2) = Bar (3, "foo");;
val d1 : int = 3
val d2 : string = "foo"

当以这种方式声明时,构造函数 Bar期望一个值是一个元组。这可以更灵活,但也需要更多的内存来表示它,并且访问部分的时间更长。

关于syntax - OCaml 构造函数解包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10306733/

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