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

Scala中的Trait,FunctionN或trait-inheriting-FunctionN?

发布时间:2020-12-16 08:58:29 所属栏目:安全 来源:网络整理
导读:我在 Scala中有一个特性,它有一个方法.称之为Computable,单个方法是compute(input:Int):Int.我无法弄清楚我是否应该这样做 使用单一方法将其保留为独立特征. 继承自(Int = Int)并将“compute”重命名为“apply”. 只需摆脱Computable并使用(Int = Int). 支
我在 Scala中有一个特性,它有一个方法.称之为Computable,单个方法是compute(input:Int):Int.我无法弄清楚我是否应该这样做

>使用单一方法将其保留为独立特征.
>继承自(Int => Int)并将“compute”重命名为“apply”.
>只需摆脱Computable并使用(Int => Int).

支持它成为特质的一个因素是我可以有用地添加一些额外的方法.但是,当然如果它们都是根据计算方法实现的,那么我可以将它们分解为一个单独的对象.

支持仅使用函数类型的一个因素是简单性以及匿名函数的语法比匿名Computable实例的语法更简洁.但是,我无法将实际Computable实例的对象与将Int映射到Int的其他函数区分开,但并不打算在与Computable相同的上下文中使用.

其他人如何处理这类问题?这里没有对错的答案;我只是在寻求建议.

解决方法

由于几个原因,创建从函数类型扩展的特征可能很有用.

>您的函数对象执行特殊且非显而易见(并且难以键入)的操作,并且您可以参数化构造函数中的轻微变体.例如,假设您正在编写特征以在XML树上执行XPath查询. apply函数将隐藏构造XPath查询机制的几种工作,但实现Function1接口仍然是值得的,这样你就可以使用map或flatMap从一大堆不同的节点开始查询.
>作为#1的扩展,你想在构造时做一些处理(例如解析XPath表达式并编译它以快速运行),你可以提前做一次,在对象的构造函数中(如果你只是curried)没有子类化的函数,编译只能在运行时发生,因此每次查询都会重复编译.)
>您希望将加密函数(一种Function1 [String,String])作为隐式,但不是所有的Function1 [String,String]执行加密.通过从Function1 [String,String]派生并命名子类/特征EncryptionFunction,您可以确保只隐式传递正确子类的函数. (当声明Type EncryptionFunction = String => String时,情况并非如此.)

我希望这很清楚.

(编辑:李大同)

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

    推荐文章
      热点阅读