risc-v中文社区

 找回密码
 立即注册
查看: 1201|回复: 1

[原创] 主构造器private之后

[复制链接]

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
发表于 2021-9-9 16:07:12 | 显示全部楼层 |阅读模式
import chisel3._
import chisel3.util._
class MyArbiterIO[T <: Data] private( val gen:T,val n:Int) extends Bundle {
  val enq = Flipped(Vec(n,new DecoupledIO(gen)))
  val deq = new DecoupledIO(gen)
}
class MyArbiterModule[T <: Data](gen:T,n:Int) extends Module {
  val io = IO(new MyArbiterIO(gen,n))  
}
上面红色地方IDEA提示错误:Type MyArbiterIO takes type parameters,但如果换成:
class MyArbiterIO[T <: Data]( val gen:T,val n:Int) extends Bundle   { //没有private
  val enq = Flipped(Vec(n,new DecoupledIO(gen)))
  val deq = new DecoupledIO(gen)
}
class MyArbiterModule[T <: Data](gen:T,n:Int) extends Module {
  val io = IO(new MyArbiterIO(gen,n))  
}
或换成:
class MyArbiterModule[T <: Data] private(gen:T,n:Int) extends Module {
  val io = IO(new MyArbiterIO[T](gen,n))  //但加上[T]
}

class MyArbiterIO[T <: Data] private( val gen:T,val n:Int) extends Bundle {
  val enq = Flipped(Vec(n,new DecoupledIO(gen)))
  val deq = new DecoupledIO(gen)
}

则不会出现错误提示了。为什么?????



回复

使用道具 举报

347

主题

564

帖子

2237

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
2237
 楼主| 发表于 2021-9-9 16:13:59 | 显示全部楼层
其实这是我的IDEA版本BUG问题,根据scala语法:主构造器private之后,是无法直接new出这个类的对象的,
所以上面主构造器private这样的代码,虽然IDEA没有提示出错,但真正编译的时候还是会出错:
Error10, 15) constructor MyArbiterIO in class MyArbiterIO cannot be accessed in class MyArbiterModule
  val io = IO(new MyArbiterIO[T](gen,n))
也就是说,有时候IDEA没有提示出错并不是真的没错,还是要根据语法判断是否出错。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



Archiver|手机版|小黑屋|risc-v中文社区

GMT+8, 2024-4-27 05:21 , Processed in 0.014636 second(s), 17 queries .

risc-v中文社区论坛 官方网站

Copyright © 2018-2021, risc-v open source

快速回复 返回顶部 返回列表