介绍下sbt的settingKey的实现原理?

⭐️⭐️⭐️⭐️⭐️⭐️

  1. 首先,sbt的所有配置都是settingKey,所有任务都是taskKey(setting和task有时候是有一样的效果)。举例:val scalacOptions = taskKey[Seq[String]]("Options for the Scala compiler.") 这里是一个任务,其中"Options for the Scala compiler."是这个任务的描述,scalacOptions是这个任务的名字(唯一),这个名字很关键,scalacOptions的名称是通过宏获取的,宏最终会生成一个TaskKey[T]对象,settingKey同理。

  2. 这样sbt便可以把任务的scope和name以及操作进行绑定,其中任务操作的定义其实就是给scalacOptions 赋值,比如:scalacOptions := Nil

  3. sbt有很多的预定义的setting和task,且用户可以自己重写它们,这与定义setting或task时是一样的。

答到1及格,答完满分

Last updated

Was this helpful?