我需要一个从 8 字节数组生成校验和的小实用函数。
现在,这本身很简单,除了我不能在 C# 中使用 byte Checksum(byte[8] input)
作为方法声明 - 我不能指定数组的大小,所以我必须使用可以是任意大小的 byte[],然后在方法主体中我需要检查输入是否为空且长度 == 8。
我只是想知道 F# 是否可以做到这一点?我听说 F# 有更多选项可以将可接受的参数限制为函数(例如,可区分联合)?
当然,在这个简单的例子中,F# 会有点过头了,但我很好奇。
最佳答案
假设您不希望调用者单独传递它们,则 byte[]
arg 可以在 IMO 中使用;我要做的唯一改变是我也会考虑传入一个起始偏移量(因为我经常发现自己远离 byte[]
的开头 - 但这取决于你的上下文) .
如果您真的想避免这种丑陋,您可以考虑将其视为 long
(或者可以说更好(因为负数右移)用于位工作:ulong
)。您总是知道它的长度正好是 8 个字节,并且它避免了启动时的几次查找。
您可以通过 byte*
和 ulong*
关于.net - F# 可以强制参数为 byte[8] 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5775149/