小编gru*_*gie的帖子

Scalaz monad变形金刚.将f1:A => G [B],f2:B => G [C]函数应用于F [G [A]]对象

我有两个(或更多)函数定义为:

val functionM: String => Option[Int] = s => Some(s.length)
val functionM2: Int => Option[String] = i => Some(i.toString)
Run Code Online (Sandbox Code Playgroud)

我也有一些数据定义为:

val data: List[Option[String]] = List(Option("abc"))
Run Code Online (Sandbox Code Playgroud)

我的问题是如何组合(以一种很好的方式)函数来获得如下结果:

data.map(_.flatMap(functionM).flatMap(functionM2))
res0: List[Option[String]] = List(Some(3))
Run Code Online (Sandbox Code Playgroud)

我不喜欢上面函数调用的语法.如果我有很多像这样的地方那么代码是非常难以理解的.

我尝试使用OptionT scalaz monad转换器,但它仍然具有嵌套映射,并且还生成嵌套的选项,如:

OptionT(data).map(a => functionM(a).map(functionM2)).run
res2: List[Option[Option[Option[String]]]] = List(Some(Some(Some(3))))
Run Code Online (Sandbox Code Playgroud)

我想要达到的目标或多或少是这样的:

Something(data).map(functionM).map(functionM2)
Run Code Online (Sandbox Code Playgroud)

甚至更好:

val functions = functionM andThenSomething functionM2
Something(data).map(functions)
Run Code Online (Sandbox Code Playgroud)

如果它可以与Try一起使用会很好.据我所知,scalaz没有TryT monad变换器,所以有没有办法很好地组合在Try上运行的函数?

functional-programming scala monad-transformers function-composition scalaz

5
推荐指数
1
解决办法
398
查看次数

Pod 未终止

我们有一个 Rancher Kubernetes 集群,terminating当我们尝试删除相应的部署时,有时 pod 会卡在状态,如下所示。

$ kubectl get deployments NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE ... storage-manager-deployment 1 0 0 0 1d ... $ kubectl delete deployments storage-manager-deployment kubectl delete deployments storage-manager-deployment deployment.extensions "storage-manager-deployment" deleted C-c C-c^C $ kubectl get po NAME READY STATUS RESTARTS AGE ... storage-manager-deployment-6d56967cdd-7bgv5 0/1 Terminating 0 23h ... $ kubectl delete pods storage-manager-deployment-6d56967cdd-7bgv5 --grace-period=0 --force warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource …

kubernetes

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