假设以下代码:
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
函数更难阅读、理解和单元测试。在我看来,该功能应该只接受它需要的东西而不接受其他任何东西,但在前面我不知道哪个部分Large
fn
fn
Large
键入所需的fn
功能。