3

这是在凿子库里面

object Module { 

  // returns a new Module of type T, initialized with a Parameters instance if  _p !=None.

  def apply[T<:Module](c: =>T)(implicit _p: Option[Parameters] = None):T

}

我不明白=参数中的符号。它代表什么?

4

2 回答 2

3

=in正在为参数(implicit _p: Option[Parameters] = None)分配默认值。这意味着除非另有说明,否则没有分配给 的实例。None_pParameter_p

以防万一您询问=>in (c: =>T)=>is 表示第一个参数c是对返回实例的函数的引用T,其中T是 的子类Module

这里使用了 Scala 的一系列惯用特性:函数柯里化、隐式参数、函数作为该语言的一等公民。花一点时间来学习这些东西的语法是值得的。查看 Chisel 的generator-bootcamp 教程,特别是第 3.2 和 3.3 节,了解 Chisel 利用 Scala 语法的一些方法

于 2018-09-17T23:07:22.987 回答
1

这个例子有两个=标志。第一个对应于 By-name 参数:https ://docs.scala-lang.org/tour/by-name-parameters.html 。

前者很重要,因为 Chisel 中的模块在Module(...)构建时必须包含在内。我们通常使用按名称调用来完成:

class MyModule extends Module {
  ...
}
// This works!
def func(mod: => MyModule) = {
  val instance = Module(mod) // The module is constructed inside Module(...)
}
func(new MyModule)

// This doesn't work!
def func(mod: MyModule) = {
  val instance = Module(mod)
}
func(new MyModule) // The module is constructed too early, here!

第二个是默认参数:https ://docs.scala-lang.org/tour/default-parameter-values.html 。这主要是一个方便的事情:

def func(x: Int = 3) = { println(x) }
func(5) // prints 5
func()  // prints 3
于 2018-09-17T23:04:38.617 回答