介绍下sbt的settingKey的实现原理?
⭐️⭐️⭐️⭐️⭐️⭐️
首先,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同理。这样sbt便可以把任务的scope和name以及操作进行绑定,其中任务操作的定义其实就是给scalacOptions 赋值,比如:
scalacOptions := Nil
。sbt有很多的预定义的setting和task,且用户可以自己重写它们,这与定义setting或task时是一样的。
答到1及格,答完满分
Last updated
Was this helpful?