如何解决链式Kotlin流量取决于结果状态
我正在寻找实现以下逻辑的最“干净”的方法:
最明显的方法是:
Dictionary<string,string> parameters = new Dictionary<string,string>();
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Encoding.GetEncoding("windows-1252");
LocalReport report = new LocalReport("report1.rdlc");
var result = report.Execute(GetRenderType("pdf"),1,parameters);
return result.MainStream;
但是它看起来像是众所周知的“回调地狱”。您有任何避免的想法吗?
解决方法
我相信可以用Method __getattr__
将其弄平:
class Character:
# more things...
def attack(self,other):
remaining = 0
h = 0
# Dice Mechanism - Based of AdB + C#
while remaining < self.get_attack_a():
add = random.randint(1,self.get_attack_b())
h += add
remaining += 1
print(h)
# more things...
,
我认为,在这种使用情况下,您可能应该使用suspend
函数,并使用await()
compose。
错误应通过here中所述的异常传递。
对МихаилНафталь提供的解决方案进行了一些修改
methodA()
.flatMapMerge {
when (it) {
is Result.Success -> methodB(it)
is Result.Failure -> emptyFlow()
}
}.flatMapMerge {
when (it) {
is Result.Success -> methodC(it)
is Result.Failure -> emptyFlow()
}
}.collect {
when (it) {
is Result.Success -> TODO()
is Result.Failure -> TODO()
}
}
将一个流的输出合并到另一个流是flatMap的目标,因此使用flatMap似乎更干净。
如果此Result类具有map
,fold
或getOrNull
类型的方法,则可以对其进行更多清理,并可以删除when块。
此外,如果您需要传播故障以进行收集,则可以用仅输出所需故障的流来替换对emptyFlow的调用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。