gpt4 book ai didi

f# - 用数组输入测试模式

转载 作者:行者123 更新时间:2023-12-01 07:59:56 25 4
gpt4 key购买 nike

我遇到了一种情况,我收到了一个对象并需要生成一个字符串。在大多数情况下,我只需调用 .ToString() 并完成它(适用于字符串、数字、日期等)

这不起作用的一种情况是表示 GUID 的字节数组。在这种情况下,ToString() 只报告“System.Byte[]”。我正在尝试使用模式匹配来捕获字节数组,以便我可以自定义字符串化。但我不知道如何匹配字节数组(或者,实际上,任何数组),除非通过数组模式。 GUID 的长度为 16 个字节,我真的不希望有一个包含 16 个命名数组元素的模式。此外,使用数组模式会导致 F# 需要一个数组作为输入,而不是一个对象:

match value (* <-- obj *) with
| [|
b1; b2; b3; b4;
b5; b6; b7; b8;
b9; b10; b11; b12;
b13; b14; b15; b16
|] -> (* do some magic here later... *) b1.ToString()
| x -> x.ToString()
> This expression was expected to have type obj but here has type 'a []

我尝试使用 Type 测试模式,但它导致编译器错误(似乎与左方括号有问题):

match value (* <-- obj *) with
| :? byte[] as guid -> (* do some magic here later... *) guid.ToString()
| x -> x.ToString()
> Unexpected symbol '[' in pattern matching. Expected '->' or other token.

关于 Pattern Matching 的 F# 文档似乎没有涵盖数组类型测试,而且我还没有通过谷歌找到任何适合我需要的东西。这里的语法是什么?

最佳答案

你可以使用:

match o with
| :? array<byte> as guid -> ...

您也可以在类型名称周围加上括号:

 match o with
| :? (byte[]) as guid -> ...

 match o with
| :? (byte array) as guid -> ...

关于f# - 用数组输入测试模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21385663/

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