如何将 F# lambda 函数定义为 return 特定数据类型?

How do you define an F# lambda function to return a specific data type?

我正在尝试使用 Moq 分配回调,但无法弄清楚如何定义 returns 布尔值的 lambda 函数。在 C# 中,这对我来说非常简单,但我在尝试将其转换为 F# 等效项时遇到问题。

let mockHttpMessageHandler = Mock<HttpMessageHandler>(MockBehavior.Strict)
mockHttpMessageHandler
    .Protected()
    .Setup<Task<HttpResponseMessage>>(
        "SendAsync",
        It.IsAny<HttpRequestMessage>()
    )
    .ReturnsAsync(
        dummyHttpResponseMessage
    )
    .Callback<HttpClient>(fun r -> r.DefaultRequestHeaders.Contains("SomeHeaderHere"))
    .Verifiable()

正如您从屏幕截图中看到的那样,我收到一个 FS0001 错误,指出表达式应该具有单位 (void) 类型,但它返回了一个布尔值(这实际上是我想要返回的类型。

屏幕截图显示我正在寻找一个空字符串,它不会是最终代码所反映的内容,而是一个示例,非空字符串无论如何仍会产生相同的错误,因此与问题无关。

我将如何修改此 lambda 表达式以表达预期结果为布尔值而不是 void 的函数?

正如 brianberns 在评论中所说,Callback 函数需要一个 returns 单元的函数。

你可以用这样的东西实现我认为你想要的(在这里使用 XUnit 的 Assert。):

.Callback<HttpClient>(fun r -> r.DefaultRequestHeaders.Contains(") |> Assert.True ())