https://mp.weixin.qq.com/s/lzDmIHkUph3b1Fxgx66ySg

 
分析移位/取反操作在Intellij中提示错误的问题。
 
1. 问题
 
用到移位/取反的地方都会有错误提示:
 
提示信息为:
 
2. 分析
 
问题发生在对UInt变量,调用在Bits中定义的方法,然后把返回值依然作为UInt使用。但是Bits中定义的方法,返回的是Bits,这就产生了类型不匹配的问题。
 
以“>>”方法为例。
 
在Bits中的定义为:
其实现依赖于抽象方法do_>>。
 
do_>>在UInt类中实现:
 
对比发现在Bits中,do_>>返回Bits类型,而在UInt中,do_>>返回UInt类型。子类中的方法会覆盖父类中的方法。所以针对UInt对象调用do_>>方法时,返回的是UInt:
 
问题在于实际使用的不是do_>>,而是>>方法。>>只在Bits中定义,返回的是Bits。虽然其实现使用的是do_>>会返回UInt,但是这个返回的UInt会被转换为Bits对象,再作为>>的返回值返回。
 
3. 解决
 
有两个解决方法。
 
1) 在子类中也定义>>/<</~等这些方法,并返回子类类型
 
这样修改每一个子类中都要定义这一组方法,解决不了代码复用的问题。
 
2) 在Bits中,把返回值类型定义为this.type。有两个地方可以佐证这种写法:
 
a. pad方法
 
b. 检视意见
REVIEW TODO: should these return this.type or Bits?
 

Rocket - tilelink - Bits vs. UInt的更多相关文章

  1. Rocket - tilelink - mask

    https://mp.weixin.qq.com/s/Gqv09RIgSSg5VKe-wb4aGg   讨论tilelink中使用MaskGen生成mask的用法.   1. tilelink中的ma ...

  2. Rocket - tilelink - Parameters

    https://mp.weixin.qq.com/s/1I6DcONr0Mg7xiX8F1C7SQ   简单介绍TileLink相关的参数实现(具体问题暂时不展开,后续用到时再做分析).   ​​   ...

  3. Rocket - tilelink - RegisterRouter

    https://mp.weixin.qq.com/s/DaJhf7hEoWsEi_AjwSrOfA   简单介绍RegisterRouter的实现.   ​​   1. 基本介绍   实现挂在Tile ...

  4. Rocket - tilelink - Xbar

    https://mp.weixin.qq.com/s/UXFHYEQaYotWNEhshro68Q   简单介绍Xbar的实现.   ​​   1. 基本介绍   用于为Xbar的输入和输出连接生成内 ...

  5. Rocket - tilelink - WidthWidget

    https://mp.weixin.qq.com/s/pmJcsRMviJZjMwlwYw6OgA   简单介绍WidthWidget的实现.   ​​   1. 基本介绍   用于设定与上游节点连接 ...

  6. Rocket - tilelink - SRAM

    https://mp.weixin.qq.com/s/-z9n6SHyAiK2OE7mOSvC2Q   简单介绍SRAM的实现.   ​​   1. 基本介绍   实现一个支持读写的静态存储器.存取的 ...

  7. Rocket - tilelink - SourceShrinker

    https://mp.weixin.qq.com/s/1vyfhZuF4RyRE5Qjj6AGWA   简单介绍SourceShrinker的实现.   ​​   1. 基本介绍   用于把上游节点的 ...

  8. Rocket - tilelink - RegionReplicator

    https://mp.weixin.qq.com/s/XZVCdt50tM6lavchGm9GRg   简单介绍RegionReplicator的实现.   ​​   1. 基本介绍   根据mask ...

  9. Rocket - tilelink - ProbePicker

      简单介绍ProbePicker的实现.   ​​   1. 基本介绍   用于把多个Cache client合并成一个: ​​   2. diplomacy node   ProbePicker的 ...

随机推荐

  1. php接口开发经验总结

    接口开发采用jwt方式验证: 接口开发最好留多几个返回方式,方便本地调用: 待更新.............

  2. java反编译软件

    1.Java反编译插件 —— Jadclipse JadClipse是Jad的Eclipse插件,是一款非常实用而且方便地Java反编译插件,我们只需将下载的插件包复制到eclipse的plugins ...

  3. 推荐算法_CIKM-2019-AnalytiCup 冠军源码解读

    最近在帮一初创app写推荐系统,顺便学习一波用户兴趣高速检索的冠军算法. 写总结前贴出冠军代码的git地址:https://github.com/ChuanyuXue/CIKM-2019-Analyt ...

  4. 【Hadoop离线基础总结】Mac版VMware Fusion虚拟机磁盘挂载

    步骤概览 1.打开所要挂载磁盘的虚拟机的设置(此时必须关机) 2.打开硬盘设置 3.添加设备 4.选择新硬盘 5.设置如下图 6.将虚拟机开机,输入 df-lh ,查看当前虚拟机磁盘 7.输入 fdi ...

  5. arangodb安装

    这里仅介绍windows环境下的安装,直接官网下载安装包安装即可.安装完后进入安装目录进行配置. cd ArangoDB\\etc\\arangodb3 打开arangod.conf配置文件,修改以下 ...

  6. CF-448C Painting Fence 分治

    Painting fence 题意 乍一看以为是之前做过的一道单调队列优化的DP,不是. 也是有n块木板,每个木板宽1米,有一个高度ai,现在要把他们刷成橘色,给了你一个宽一米的刷子,你可以横着刷,或 ...

  7. 设计模式之GOF23适配器模式

    结构型模式 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的 类结构,用来解决更大的问题 适配器模式adapter 实际生活中的例子:转换器 适配器的两种方式: 1,类适配器(继承) /**需 ...

  8. ERROR 1552 --- [ main] o.s.b.d.LoggingFailureAnalysisReporter : 问题的解决

    找到SpringbootApplication类, 在注释@SpringBootApplication后加上(exclude = {DataSourceAutoConfiguration.class} ...

  9. Linux设定系统变量和单个用户的环境变量问题

    环境为Ubuntu. 设定系统变量意思就是所有用户都可以使用设定的环境变量,而设定用户的单个环境变量意思就是只有设定环境的该用户才可以使用这个环境变量. 这里以java的jdk环境变量JAVA_HOM ...

  10. wepy 小程序开发(Mixin混合)

    默认式混合 对于组件data数据,components组件,events事件以及其它自定义方法采用默认式混合,即如果组件未声明该数据,组件,事件,自定义方法等,那么将混合对象中的选项将注入组件之中.对 ...