加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如果Scala方法可以抛出/返回错误但具有单位返回类型,那么它应具

发布时间:2020-12-16 08:59:04 所属栏目:安全 来源:网络整理
导读:因此,通常当我们运行一个既失败又返回值的方法时,我们可以将方法返回类型编码为Either [SomeErrorType,ReturnType].但很多时候我们正在为其副作用运行一种方法,因此返回类型是Unit. 我当然可以返回一个[SomeErrorType,Unit],但肯定看起来很奇怪. 我也可以只
因此,通常当我们运行一个既失败又返回值的方法时,我们可以将方法返回类型编码为Either [SomeErrorType,ReturnType].但很多时候我们正在为其副作用运行一种方法,因此返回类型是Unit.

我当然可以返回一个[SomeErrorType,Unit],但肯定看起来很奇怪.

我也可以只返回一个Option [SomeErrorType],但它看起来并没有那么好(并且打破了与其他Either [SomeErrorType,NonUnitReturnType]的可能存在的对称性.

在这些情况下你的方法是什么?

> def m():单位//并隐含地知道可以抛出异常?
> def m():[SomeErrorType,Unit] //这是奇数;
> def m():选项[SomeErrorType] //这很奇怪,因为它看起来像成功运行的返回类型ofm()是一个错误代码.
>其他我想不到的?

谢谢

解决方法

我在这种情况下使用Try [Unit].

它编码该方法的结果成功或失败并带有一些异常,可以进一步处理.

> vs T =>单元尝试将错误提升到应用程序级别,在签名中编码可能会出现一些错误,并允许应用程序将其作为值处理.
> vs.选项[T] =>选项只能编码操作具有值
> vs. [SomeErrorType,Unit] =>尝试使用monadic结构更容易.

我用这样的东西来实现检查. (想象的例子)

for {
    entity <- receiveEntity // Try[Entity]
    _ <- isRelational(entity)
    _ <- isComplete(entity)
    _ <- isStable(entity)
} yield entity

每个支票的形式为:Entity =>尝试[单位]

如果所有检查都通过了检查失败的第一个错误,这将返回实体.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读