如何用较少的括号在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |