Scala特征语法
发布时间:2020-12-16 09:23:34 所属栏目:安全 来源:网络整理
导读:我正在阅读Odersky的书,下面是一个带有以下代码部分的speadsheet示例: package org.stairwaybook.scells trait Arithmetic { this: Evaluator = operations += ( "add" - { case List(x,y) = x + y },"sub" - { case List(x,y) = x - y },"div" - { case Li
我正在阅读Odersky的书,下面是一个带有以下代码部分的speadsheet示例:
package org.stairwaybook.scells trait Arithmetic { this: Evaluator => operations += ( "add" -> { case List(x,y) => x + y },"sub" -> { case List(x,y) => x - y },"div" -> { case List(x,y) => x / y },"mul" -> { case List(x,y) => x * y },"mod" -> { case List(x,y) => x % y },"sum" -> { xs => (0.0 /: xs)(_ + _) },"prod" -> { xs => (1.0 /: xs)(_ * _) } ) } “this:Evaluator”是指什么?有人可以帮助理解这个特性吗?我认为它定义了不同的功能操作,但我看不到大局…… 解决方法
你在这看到什么
this:Evaluator => 是特征的自我类型的用法.它基本上强制类将混合特征算术,以混合特质评估器. 如果您尝试创建如下所示的类: class ArithmeticClass extends Arithmetic 你会得到一个编译时错误,而如果你试图这样做: class ArithmeticClass extends Arithmetic with Evaluator 这是有效的.如您所见,算术类修改了向操作添加内容,这可能是Evaluator特征中定义的集合. 请注意,与简单继承相比,自我类型允许您设计更干净的类层次结构: 如果您使用自我类型,您可以考虑以下内容: trait Evaluator { def runEvaluation : Int } trait Arithmetic { self: Evaluator => def evaluate: Int = runEvaluation } trait NullEvaluator extends Evaluator { def runEvaluation: Int = 0 } class MyClass1 extends Arithmetic with Evaluator {... concrete methods .... } class MyClass2 extends Arithmetic with NullEvaluator { ....concrete methods ..... } 所以自我类型让你表达与继承不同的东西. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- twitter-bootstrap – 您可以使用.NET MVC模板中的bootstra
- 浅谈WebService SOAP、Restful、HTTP(post/get)请求
- bash – 在管道命令中从文件内容切换到STDIN? (Linux Shel
- 集成消息服务感想
- Webservice的查询接口
- Angular 2 + 折腾记 :(9) 初步了解指令,及动手一步一步写
- Angular 5反应形式 – 禁用无线电组中的一个无线电选项
- angular – 如何在Chrome开发人员工具中启用在控制台中使用
- twitter-bootstrap – twitter bootstrap popover不适用于a
- 【数据结构】——平衡二叉树(插入)