2016-04-15 1 views
3

Je suis encore nouveau à Scala et l'outil de construction SBT. Dans le guide de démarrage officiel pour SBT, j'ai rencontré l'exemple suivant de build.sbt. Le DSL ressemble à une sorte de langage de script, mais j'ai toujours du mal à comprendre ce qui se passe. Mes questions sont:Comment interpréter ce DSL DSL?

  1. Qu'est-ce que file(".")? Renvoie-t-il une liste de fichiers dans le répertoire courant?
  2. L'instruction project in file(".") est-elle une expression de boucle for-in? Pourquoi le root doit-il être annoté avec lazy?

Merci.

Répondre

3

Qu'est-ce qu'un fichier (".")? Renvoie-t-il une liste de fichiers dans le répertoire actuel?

file(".") renvoie un type sbt.File, qui est un alias pour le type java.io.File, which describes a file/directory. Le point fait référence au projet de niveau supérieur, ou le chemin par rapport auquel le fichier/répertoire réside: (« »)

scala> import java.io._ 
import java.io._ 

scala> val f = new File(".") 
f: java.io.File = . 

scala> f.getAbsolutePath 
res0: String = C:\Users\MyUser\. 

scala> f.isDirectory 
res1: Boolean = true 

est le projet de déclaration dans le dossier d'un pour-expression de la boucle?

Non. C'est un appel de méthode simple, équivalent à project.in(file(".")). Scala a une fonction appelée "infix notation", ce qui vous permet d'appeler une méthode d'arité 0 ou 1 sans .

Pourquoi la racine doit être annotée avec paresseux?

Il ne l'a pas être. lazy dans Scala diffère l'allocation d'une variable à la première fois que quelqu'un l'appelle, au lieu de l'allouer au préalable lors de l'initialisation du constructeur.