我有两种记录类型:
type Employee = {
Id: string
Name: string
Phone: string
}
type AuditLog = {
PerformedBy: string
PerformedOn: string
}
Run Code Online (Sandbox Code Playgroud)
以下是记录类型的实例:
let emp = {
Id = "123"
Name = "Abc"
Phone = "999"
}
let log = {
PerformedBy = "234"
PerformedOn = "1/1/1"
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以组合这两个实例的字段来创建新的记录/匿名记录类型,如下所示?
let combined = {
Id = "123"
Name = "Abc"
Phone = "999"
PerformedBy = "234"
PerformedOn = "1/1/1"
}
Run Code Online (Sandbox Code Playgroud) 假设我有一张地图M:Map<int, bool>(最初是空的)。这次我想更新。我有一个列表L = [1 .. 100],对于这个列表中的每个元素,我想将相应的值设置为Mfalse。所以像,[1 .. 100] |> List.map (fun x -> M.Add(x, false))。但是M.Add()每次都会返回一个新地图并且不会反映更新。如何以惯用的 F# 方式进行此更新?
由于值限制问题,以下 F# 代码无法编译:
let x = List.rev []
Run Code Online (Sandbox Code Playgroud)
但这编译:
let x = List.rev [] in 3::x
Run Code Online (Sandbox Code Playgroud)
据我了解,编译器推断它x必须是类型int list,因此它无法编译。
以下内容无法编译:
let x = List.rev [] in (3::x, true::x)
Run Code Online (Sandbox Code Playgroud)
但这确实:
let x = ([]) in (3::x, true::x)
Run Code Online (Sandbox Code Playgroud)
为什么?
I'm using Giraffe framework to implement a web server in F#. The web server executes some stored procedures based on client requests. Errors are thrown inside stored procedures when the request cannot be processed and I'm catching the errors in Giraffe like this:
try
// parse request ...
// data access and execute stored procdeure ...
with
| :? System.Data.SqlClient.SqlException as e ->
match e.Number with
| 60000 ->
return! (setStatusCode 400 >=> json e.Message) next ctx
Run Code Online (Sandbox Code Playgroud)
Let's say …