我想创建一个模板插件,并且第一步将任意字符串转换为它的"编译"AST表示(正如scala解释器所做的那样,我猜).所以编译器插件可以例如将someString分配给"HELLO WORLD":
@StringAnnotation("""("hello world").toString.toUpperCase""")
var someString = ""
Run Code Online (Sandbox Code Playgroud)
我目前的第一个镜头插件简而言之:
见:http://paste.pocoo.org/show/326025/
a)现在,"object o{val x = 0}"返回一个AST,但"var x = 1+ 2"不是因为它不是一个有效的.scala文件.我怎样才能解决这个问题?
b)仅仅是演示是一个好的选择吗?我应该改为使用适当的阶段覆盖computeInternalPhases还是使用-Ystop:phase?
c)是否可以将外部编译器的环境绑定到内部编译器,以便例如
var x = _
(...)
@StringAnnotation("x += 3")
Run Code Online (Sandbox Code Playgroud)
会工作?
我发现以下代码[1]使用解释器和一个类似的变量:
Interpreter interpreter = new Interpreter(settings);
String[] context = { "FOO" };
interpreter.bind("context", "Array[String]", context);
interpreter
.interpret("de.tutorials.scala2.Test.main(context)");
context[0] = "BAR";
interpreter
.interpret("de.tutorials.scala2.Test.main(context)");
Run Code Online (Sandbox Code Playgroud)
谢谢
完整代码:
class AnnotationsPI(val global: Global) extends Plugin {
import global._
val name = "a_plugins::AnnotationsPI" //a_ …Run Code Online (Sandbox Code Playgroud) 如果我想自己实现文本投影编辑器,我该从哪里开始?
Scala 2.8昨天宣布.他们突出了"增强型演员"等内容.
"具有守护进程风格语义的演员"是什么意思,我在哪里可以找到更多关于它的内容?
在编写Scala RemoteActor代码时,我发现了一些陷阱:
程序员应该注意其他任何陷阱吗?
如何将 Java 8OffsetTime和OffsetDateTimeHibernate 持久化为正确的 SQL 类型(TIME_WITH_TIMEZONE和TIMESTAMP_WITH_TIMEZONE)?我在博客中找到LocalTime并LocalDateTime使用了EnhancedUserTypes的解决方案。
用户类型如何用于偏移数据?
我想知道是否可以使用springs的查询方法指定特定的子类型。
例如,如果有一个MailUser和ChatUser,两个都extend User带有InheritanceType.SINGLE_TABLE-我可以找到所有MailUser带有的s PersonRepository吗?
或者在多个类的情况下,我可以找到User不包括所有的所有MailUsers extend User吗?
public interface PersonRepository extends Repository<User, Long> {
List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);
...
}
Run Code Online (Sandbox Code Playgroud) 例如
class Foo {
Integer bar;
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么没有一种语言功能可以让我这么做
Foo.class.bar //yes, xxx.class returns something of java.lang.Class<T>
Run Code Online (Sandbox Code Playgroud)
引用元字段栏?
我正在阅读Pro JPA 2 Book,在我看来,规范的元模型生成是必要的,因为这在Java中是不可能的.
请注意,这是一个出于好奇的理论问题,我想获得一些见解,为什么没有实现此功能.
---更新---
为了更详细地阐述我的问题,请考虑通过Entity Graph API在JPA中添加属性的示例:
EntityGraph<Foo> g = myEntityManager.createEntityGraph(Foo.class)
g.addAttributeNodes("bar")
Run Code Online (Sandbox Code Playgroud)
字符串"bar"和Foo属性之间没有正式的链接(对于编译器/ IDE)bar.
为了使用JAXB 正确处理xs:dateTime,我必须从String- > 编写自己的转换器java.time.OffsetDateTime.
正如XML Schema Definition中所提到的,dateTime的灵感来自ISO 8601.我曾经OffsetDateTime.parse(s, DateTimeFormatter.ISO_OFFSET_DATE_TIME)解析过xs:dateTime,它适用于例如
"2007-12-03T10:15:30+01:00" //or
"2007-12-03T10:15:30Z"
Run Code Online (Sandbox Code Playgroud)
遗憾的是,在xs:dateTime偏移部分声明是可选的,因此解析有效
"2016-03-02T17:09:55"
Run Code Online (Sandbox Code Playgroud)
抛出一个DateTimeParseException.
是否存在DateTimeFormatterOffsetDateTime,它还处理未分区的xs:dateTimes(可能具有默认时区)?
我已经包装了一条消息,并希望记录我已经包装的消息.
val any :Any = msg.wrappedMsg
var result :Class[_] = null
Run Code Online (Sandbox Code Playgroud)
我能找到的唯一解决方案是匹配所有内容:
result = any match {
case x:AnyRef => x.getClass
case _:Double => classOf[Double]
case _:Float => classOf[Float]
case _:Long => classOf[Long]
case _:Int => classOf[Int]
case _:Short => classOf[Short]
case _:Byte => classOf[Byte]
case _:Unit => classOf[Unit]
case _:Boolean=> classOf[Boolean]
case _:Char => classOf[Char]
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有更好的解决方案?以下两种方法不起作用:(
result = any.getClass //error
// type mismatch; found : Any required: ?{val getClass: ?}
// Note: Any is not implicitly converted to …Run Code Online (Sandbox Code Playgroud)