假设以下代码:
type Large = { v1: int; v2: int }
type Small = { v1: int }
let fn (value: Small) = printfn "%d" value.v1
// or
let fn (value: {v1: int}) = printfn "%d" value.v1
let large = { v1 = 5; v2 = 6 }
fn large
Small基本上是一个子记录Large。fn large引发错误。有什么“好”的方法可以让它发挥作用吗?
背景:
通常情况下,您有大量数据。您希望将该数据作为参数传递给用户提供的未知函数。您唯一知道的是该函数将需要一部分数据。但是您不知道数据的哪一部分,也不知道Small类型。你只知道Large类型。一种选择是以large记录的形式将所有数据发送到未知函数。但我认为,如果该函数只使用其中的一小部分,它fn就不应该接受数据。数据只会使Large函数更难阅读、理解和单元测试。在我看来,该功能应该只接受它需要的东西而不接受其他任何东西,但在前面我不知道哪个部分LargefnfnLarge键入所需的fn功能。