Dan*_*tin 21 scala operators sbt
总有一天,我想学习Scala.我从喜欢它的人那里看到的语言非常令人鼓舞.
但是,今天不是那一天.今天,我只想对我的团队的构建文件进行一些更改.不幸的是,这个构建文件与SBT放在一起,几乎是不可理解的.
我的主要问题是,在我看来,SBT引入了一些庞大的新运算符集合,这些运算符使用字符串和列表来创建某种sbt对象.例如,在sbt中:
"args4j" % "args4j" % "2.0.12"
Run Code Online (Sandbox Code Playgroud)
显然是实际定义的; 但是,我甚至无法分辨它在scalarepl中的类型,因为在repl我得到了明智的错误:
scala> val tstcrap = "args4j" % "args4j" % "2.0.12"
<console>:6: error: value % is not a member of java.lang.String
val tstcrap = "args4j" % "args4j" % "2.0.12"
Run Code Online (Sandbox Code Playgroud)
即使在设置类路径以包含sbt-launch.jar文件并执行操作后,我也会收到此错误import sbt._.
同样,我正在处理这样的事情:
val jarSources = (descendents(classesOutput ##, "*") ---
assemblyExclude(classesOutput ##))
Run Code Online (Sandbox Code Playgroud)
什么是##运算符,这是---做什么的,更重要的是这个表达式的类型是什么?所有这些新操作符都记录在某处,是否有某种方法可以使用与sbt构建文件中使用的语言相同的scala repl?
查看此sbt文件会让我想起在perl没有阅读任何相关手册页的情况下尝试破译.(不是推荐的活动)
更新:在查看下面答案中的链接,并查看标记的其他问题和答案后sbt,我发现了我缺少的主要scala知识:scala允许定义在方法之前调用的隐式转换得到了解决.在这种情况下,sbt在ManagedProjecttrait 内部定义,隐式转换String为私有类sbt.GroupID,以便
"a" % "b"
Run Code Online (Sandbox Code Playgroud)
真的是这样的
(new GroupID("a")) % "b"
Run Code Online (Sandbox Code Playgroud)
我想隐含转换的解决顺序和其他规则必须变得非常复杂; 它几乎让我想起你可以通过非成员函数完成运算符重载时用C++引入的噩梦.
由于SBT构建文件是一个成熟的Scala源文件并且依赖于SBT本身提供的一些库,因此很难在不依赖于对Scala的熟悉的情况下很好地覆盖SBT.我不知道这样的指南.
对于您提出的具体问题,我认为这些维基页面将有所帮助:
%字符串运算符:http://code.google.com/p/simple-build-tool/wiki/LibraryManagement##和---运营商:http://code.google.com/p/simple-build-tool/wiki/Paths如果您希望使用SBT库运行Scala REPL,请尝试以下操作:
$ sbt console-project
Run Code Online (Sandbox Code Playgroud)
http://code.google.com/p/simple-build-tool/wiki/RunningSbt列出了一些其他有用的命令.
| 归档时间: |
|
| 查看次数: |
1585 次 |
| 最近记录: |