小编Mar*_*ing的帖子

Scala Presentation Compiler - 最小的例子

有人可以提供使用当前scala表示编译器(即)的最小示例scala.tools.nsc.interactive.Global,它可以完成以下任务吗?

  • 编译单个虚拟源文件(即不在文件系统中,但例如a String)
  • 从编译器检索所有阶段的结果信息
  • 将源文件中的更改传播到编译器
  • 可能异步接收进一步的信息

似乎有很多波动nsc,我找不到最新的小例子.所以我非常感谢你的帮助.

compiler-construction scala

26
推荐指数
2
解决办法
1507
查看次数

如何测试Scala宏?

在scala宏上执行测试的建议方法是什么?

我意识到由于需要单独编译,需要两个项目.如有必要,此步骤可以接受并且大部分都是清楚的.

但是,如何断言宏扩展失败呢?如果没有一些特殊功能,测试用例将无法编译,因此整个测试项目将无法编译.

我认为这个断言需要另一个形式的宏

errors(code: => _): List[CompileError]
Run Code Online (Sandbox Code Playgroud)

它返回内部宏的编译错误.如果他们应该发出警告,那么测试警告也是必需的......等等......

Scala宏是否有一些现有的测试工具?

scala scala-macros

11
推荐指数
1
解决办法
683
查看次数

Play 2.1中的scala.tools.nsc.IMain

我google了很多,现在完全陷入困境.我知道,有类似的问题,但请读到最后.我已经尝试了所有提出的解决方

我试图在Play 2.1项目中使用IMain该类scala.tools.nsc(使用Scala 2.10.0).

控制器代码

这是代码,我尝试IMain在Websocket中使用它.这仅用于测试.

object Scala extends Controller {
  def session = WebSocket.using[String] { request =>
    val interpreter = new IMain() 
    val (out,channel) = Concurrent.broadcast[String]
    val in = Iteratee.foreach[String]{ code =>
      interpreter.interpret(code) match {
        case Results.Error =>      channel.push("error")
        case Results.Incomplete => channel.push("incomplete")
        case Results.Success =>    channel.push("success")
      }      
    } 
    (in,out)
  }
}
Run Code Online (Sandbox Code Playgroud)

只要通过Websocket发送了一些内容,就会发现以下错误:

Failed to initialize compiler: object scala.runtime in compiler mirror not found.
** Note that as of 2.8 scala does not …
Run Code Online (Sandbox Code Playgroud)

scala classpath read-eval-print-loop playframework-2.0

9
推荐指数
1
解决办法
1037
查看次数

在Scala宏中匹配XML文字

我想用宏转换Scala XML文字.(不是带XML的字符串文字,而是实际的XML文字).据我所知,XML文字实际上并没有构建在AST级别的语言中,而是在解析器中被贬低.有趣的是,这确实有效:

case q"<specificTag></specificTag>" => ... // succeeds for specificTag with no
                                           // attributes and children
Run Code Online (Sandbox Code Playgroud)

但显然,这完全没用,因为不可能以任意方式匹配任意xml.就像是

case q"<$prefix:$label ..$attrs>$children</$prefix:$label>" => ...
Run Code Online (Sandbox Code Playgroud)

无法工作,因为我们必须在模式中绑定相同的变量两次.

打印出这样的xml文字表达式的树实际上给出了desugared版本.例如.

new _root_.scala.xml.Elem(null,"specificTag",_root_.scala.xml.Null,$scope,false)
Run Code Online (Sandbox Code Playgroud)

但尝试匹配此失败:

case q"new _root_.scala.xml.Elem(..$params)" => ... // never succeeds
Run Code Online (Sandbox Code Playgroud)

我很迷惑!我的问题是:有没有办法可靠地匹配scala宏中的任意xml litarals?另外:为什么它们在quasiquotes中支持常量xml而不是desugared值呢?

scala scala-xml scala-macros scala-quasiquotes

8
推荐指数
1
解决办法
481
查看次数

在sbt中手动调用sourceGenerators

sourceGenerators in Compile用来生成一些Scala源文件来定位\ scala-2.10\src_managed.当我运行时sbt compile,源代码与src\main\scala下的常规代码一起生成和编译.

但是,如果我想在不编译的情况下单独生成源代码呢?我正在寻找的是这个流程:

  1. 调用任务来生成源代码
  2. 在我的常规源中使用生成的IDE帮助来源
  3. 编译一切

如何实现这一目标?

scala sbt

6
推荐指数
1
解决办法
1351
查看次数

如何使用scala.util.parsing.ast.Binders?

我目前正在Scala中实现一个小编译器,当我在进行上下文分析的组件时,我发现了Binders包中的特征scala.util.parsing.ast(我正在使用Scala 2.9 RC),它是Documented以在解析时启用名称绑定.这听起来很有趣,我一直在谷歌搜索,但我仍然不知道如何使用它.虽然我当然能够让我的抽象语法脱离,但Binders我不知道如何从那里开始.网上有什么用法的例子吗?

compiler-construction binding functional-programming scala parser-combinators

5
推荐指数
1
解决办法
243
查看次数

如何从List [String]映射到Slick 2.0中的String?

因为MySQL数据库不支持Arrays,我想将字符串列表映射为类似List("facebook","linkedin","local")字符串"facebook, linkedin, local".

我想用slick 2.0进行双向映射,但我不知道如何编写实例TypeMapper.

谁能为我提供一个例子?

scala type-conversion slick slick-2.0

2
推荐指数
1
解决办法
888
查看次数