我有一个简单的理解代码:
def nameFormatter(request: SomeRequest) : FormattedData = {
for {
config <- ZIO.fromOption(configuration.get(request.name)).orElseFail( new Exception("Unknown config"))
name = config.data.name.pipe(SomeName)
} yield FormattedData(
name,
request.age
)
}
但此方法返回:
ZIO[Any, Exception, FormattedData]
我想把这个方法改成只返回FormattedData
,而不是整个ZIO。这可能吗?或者我应该读取返回的类型并从中获取值?
3条答案
按热度按时间yhived7q1#
ZIO使这一点变得困难,因为它是不安全的,而且它违背了使用ZIO的目的。从类型
ZIO[Any, Exception, FormattedData]
可以看出,如果您试图物化值,它可能会失败。如果你真的想这么做:
否则,您应该使用
nameFormatter(request)
的结果来编写代码的其余部分,并使用如下代码运行它:hyrbngr72#
使用方法是
或者在一个理解中:
这没有回答您的问题,但这可能是您想要做的。
ztmd8pv53#
从ZIO 2.0开始,不安全的运行效果会像这样:
为了工作,需要提供一个隐式参数
unsafe: zio.Unsafe
,可以这样做:请参阅文档:https://zio.dev/reference/core/runtime/#running-a-zio-effect