如何将 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 ())
我正在尝试使用 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 ())