Scala – 方法优先
发布时间:2020-12-16 09:31:44 所属栏目:安全 来源:网络整理
导读:我是Scala的新人我想知道是否可以使用方法调用定义一些优先级。例如,如果我有方法调用链: someObject method1 param1 method2 param2 method3 param3 这可以等同于以下内容: someObject.method1(param1).method2(param2.method3(param3)) 要么 someObject
我是Scala的新人我想知道是否可以使用方法调用定义一些优先级。例如,如果我有方法调用链:
someObject method1 param1 method2 param2 method3 param3 这可以等同于以下内容: someObject.method1(param1).method2(param2.method3(param3)) 要么 someObject method1 param1 method2 (param2 method3 param3) 所以我想要method3优先于method2 … 我想这样做的原因是我想开发一个DSL,所以我想避免使用点和括号尽可能多。如果你们为我找到另一个解决方案,请随时让我知道。 解决方法
您必须使用具有特殊操作符字符的方法来影响Tomasz暗示的优先级。这部分是为什么大量的Scala DSL大量使用操作符。也是为什么有些DSL很难阅读,如果你不与他们每天工作。
给定方法只使用字母,下划线和数字 – 您将无法影响事情,这里是我阅读规格后自己放在一起的事情: >任何采用单个参数的方法都可以用作中缀运算符:a.m(b)可以写成m b。 所以,不知道你的方法签名是什么,以下代码(因为它都是字母数字): someObject method1 param1 method2 param2 method3 param3 将被解析为: someObject.method1(param1).method2(param2).method3(param3) 如果您将method3重命名为| * |或者:或者任何操作符是有意义的,你可以实现你想要的: someObject method1 param1 method2 param2 |*| param3 // same as someObject.method1(param1).method2(param2.|*|(param3)) 例如看到的区别: implicit def pimp(s:String) = new { def |*|(t:String) = t + s def switch(t:String) = t + s } scala> "someObject" concat "param1" concat "param2" |*| "param3" res2: java.lang.String = someObjectparam1param3param2 scala> "someObject" concat "param1" concat "param2" switch "param3" res3: java.lang.String = param3someObjectparam1param2 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |