我发现自己经常返回类型Option<Result<'a,'b>>,我的推理如下:
我使用 Option 来决定我是否对处理事件感兴趣,如果我感兴趣,那么我会返回处理它的结果。
这种模式有合适的名称吗?和更好的运营商?例如,我使用:Option.map(Result.map f)是否有用于映射嵌套函子的运算符?
使用Serilog和F#如何使用.ForContextwith函数?看来它只接受类型类:
type A()=\n log = Serilog.Log.ForContext<A>() // \xe2\x9c\x85\nRun Code Online (Sandbox Code Playgroud)\nlet f _ =\n log = Serilog.Log.ForContext<f>() // compile error\n log = Serilog.Log.ForContext(f.GetType()) // the information is not the same as A where it gives module + type path\nRun Code Online (Sandbox Code Playgroud)\n添加 F# 函数或 C# 方法的上下文的正确方法是什么(我认为应该是同一个问题)?
\n到目前为止,我的解决方案一直使用这个函数,它返回 SourceContext 与使用类 ( moduleFullName+className) 完全相同:
let logFromFn _ =\n Serilog.Log.ForContext\n ("SourceContext",\n StackTrace().GetFrame(1).GetMethod().DeclaringType\n |> fun dt -> dt.FullName + "+" + dt.Name)\nRun Code Online (Sandbox Code Playgroud)\n我已经阅读了调用多个服务部分,它说一个人可以调用多个承诺,但在我自己的测试中,它们看起来不需要等待前一个完成就被调用
// ...
invoke: [
{ id: 'service1', src: 'someService' },
{ id: 'service2', src: 'someService' },
{ id: 'logService', src: 'logService' }
],
// ...
Run Code Online (Sandbox Code Playgroud)
这是一个答案以及创建中间状态的解决方法
states: {
first: {
invoke: {
src: 'one',
onDone: {
target: 'second',
}
}
},
second: {
invoke: {
src: 'two',
onDone: {
target: 'success',
}
}
},
success: {
type: 'final'
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法Promise.each用调用进行链接,使 invoke([]) 串行运行?
我只能看到两个选项:
给出以下受歧视联盟:
type A = B of string | C of int
Run Code Online (Sandbox Code Playgroud)
如何获取构造函数 B 的名称?
A.B.ToString()
// would return something like:
val it : string = "FSI_0045+it@109-19"
// when I desire
val it : string = "B"
Run Code Online (Sandbox Code Playgroud)
例如,对于这种类型,它可以工作:
type D = E | F
D.E.ToString();;
val it : string = "E"
Run Code Online (Sandbox Code Playgroud)
我通常使用以下命令获取 DU 实例的字符串名称
let stringFromDU (x: 'a) =
match FSharpValue.GetUnionFields(x, typeof<'a>) with
| case, _ -> case.Name
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,我没有实例,我只想序列化标签名称。