小编Cod*_*gar的帖子

如何组合选项和结果

我发现自己经常返回类型Option<Result<'a,'b>>,我的推理如下:

我使用 Option 来决定我是否对处理事件感兴趣,如果我感兴趣,那么我会返回处理它的结果。

这种模式有合适的名称吗?和更好的运营商?例如,我使用:Option.map(Result.map f)是否有用于映射嵌套函子的运算符?

f#

5
推荐指数
2
解决办法
198
查看次数

如何将 Serilog.Log.ForContext 与 F# 函数或 C# 方法一起使用

使用Serilog和F#如何使用.ForContextwith函数?看来它只接受类型类:

\n
type A()=\n  log = Serilog.Log.ForContext<A>() // \xe2\x9c\x85\n
Run Code Online (Sandbox Code Playgroud)\n
let 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\n
Run Code Online (Sandbox Code Playgroud)\n

添加 F# 函数或 C# 方法的上下文的正确方法是什么(我认为应该是同一个问题)?

\n
\n

到目前为止,我的解决方案一直使用这个函数,它返回 SourceContext 与使用类 ( moduleFullName+className) 完全相同:

\n
let logFromFn _ =\n  Serilog.Log.ForContext\n    ("SourceContext",\n     StackTrace().GetFrame(1).GetMethod().DeclaringType\n     |> fun dt -> dt.FullName + "+" + dt.Name)\n
Run Code Online (Sandbox Code Playgroud)\n
    \n
  1. 正如这个答案中所述,它可能很昂贵,我在整个程序中调用一次的地方使用它。
  2. \n …

c# f# serilog

4
推荐指数
1
解决办法
1187
查看次数

XState:在没有中间状态的情况下链接多个承诺

我已经阅读了调用多个服务部分,它说一个人可以调用多个承诺,但在我自己的测试中,它们看起来不需要等待前一个完成就被调用

// ...
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([]) 串行运行?

我只能看到两个选项:

  1. 中间状态
  2. 调用一个自身进行链接的 promise。

javascript typescript reactjs xstate

2
推荐指数
1
解决办法
775
查看次数

受歧视联盟标签到字符串

给出以下受歧视联盟:

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)

但在这种情况下,我没有实例,我只想序列化标签名称。

f#

2
推荐指数
1
解决办法
352
查看次数

标签 统计

f# ×3

c# ×1

javascript ×1

reactjs ×1

serilog ×1

typescript ×1

xstate ×1