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

如何用较少的括号在Scala中编写f(g(h(x)))?

发布时间:2020-12-16 19:12:12 所属栏目:安全 来源:网络整理
导读:表达式如 ls map (_ + 1) sum 很可爱,因为它们是从左到右而不是嵌套.但是如果有问题的函数是在类之外定义的,那就不那么漂亮了. 在an example之后我试过了 final class DoublePlus(val self: Double) { def hypot(x: Double) = sqrt(self*self + x*x)}implici
表达式如

ls map (_ + 1) sum

很可爱,因为它们是从左到右而不是嵌套.但是如果有问题的函数是在类之外定义的,那就不那么漂亮了.

在an example之后我试过了

final class DoublePlus(val self: Double) {
    def hypot(x: Double) = sqrt(self*self + x*x)
}

implicit def doubleToDoublePlus(x: Double) =
    new DoublePlus(x)

除了我以外,它可以正常工作

>为一种方法打字很多
>您需要提前知道您想以这种方式使用它

有没有一个技巧可以解决这两个问题?

解决方法

您可以在函数对象上调用andThen:

(h andThen g andThen f)(x)

你不能直接在方法上调用它,所以也许你的h需要变成(h _)来将方法转换为部分应用的函数.编译器会自动将后续方法名称转换为函数,因为andThen方法接受Function参数.

你也可以使用pipe operator |>写这样的东西:

x |> h |> g |> f

(编辑:李大同)

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

    推荐文章
      热点阅读