小编Eyv*_*ind的帖子

无法获得Groovy AST示例

我正在尝试学习如何使用(和扩展)groovy,我正在关注此页面中的示例.基本上,它显示了如何为groovy代码定义一个注释,使您可以挂钩到编译器进程.该示例围绕着写入和注释,这将导致在方法调用之前和之后打印行.

我的代码如下; 首先必要的进口:

package foo

import org.codehaus.groovy.transform.*
import java.lang.annotation.*
import org.codehaus.groovy.ast.*
import org.codehaus.groovy.control.*
import org.codehaus.groovy.ast.stmt.*
import org.codehaus.groovy.ast.expr.*
Run Code Online (Sandbox Code Playgroud)

然后,我们定义要使用的注释:

@Retention(RetentionPolicy.SOURCE)
@Target([ElementType.METHOD])
@GroovyASTTransformationClass(["foo.LoggingASTTransformation"])
public @interface WithLogging {
}
Run Code Online (Sandbox Code Playgroud)

那么转型本身:

@GroovyASTTransformation(phase=CompilePhase.SEMANTIC_ANALYSIS)
public class LoggingASTTransformation implements ASTTransformation {

  public void visit(ASTNode[] nodes, SourceUnit sourceUnit) {
      println("visiting astnodes")
      List methods = sourceUnit.getAST()?.getMethods()
      // find all methods annotated with @WithLogging
      methods.findAll { MethodNode method ->
          method.getAnnotations(new ClassNode(WithLogging))
      }.each { MethodNode method ->
          Statement startMessage = createPrintlnAst("Starting $method.name")
          Statement endMessage = createPrintlnAst("Ending $method.name")

          List existingStatements …
Run Code Online (Sandbox Code Playgroud)

groovy abstract-syntax-tree

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

Java全局命名空间访问

鉴于以下计划:

class A {
   static int java = 42;
   static int System = -1;

   public static void main(String[] args) {
      java.lang.System.out.println("Foo");
   }
}
Run Code Online (Sandbox Code Playgroud)

编译这个给我一个错误,说"int不能被解除引用".原因很明显,但是应该如何处理这样的情况.它在代码生成场景中尤其重要,在代码生成场景中,人们无法知道哪些用户代码与生成的代码交织在一起.

在C#中我只会在"java.lang"之前使用"global ::"命名空间说明符,但是你用Java做什么?

java code-generation namespaces package

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

SQL Server:隐式数据类型转换图表

据我所知,根据此图表,从VARBINARY到DATE的隐式转换应该没问题.但是,当我尝试以下代码时,SQL Server会响应"不允许从数据类型varbinary(max)到日期的隐式转换.使用CONVERT函数来运行此查询."

CREATE TABLE [dbo].[CONVERSION_TEST](
[mydate] [date] NULL
) ON [PRIMARY]

GO


declare @bin varbinary(MAX) = NULL
insert into conversion_test values (@bin)
Run Code Online (Sandbox Code Playgroud)

我在SQL Server 2012(版本11.0.3128)上运行它.

sql-server implicit-conversion

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

0xF8是UTF-8编码的XML文档中的有效字节吗?

我收到一份声称是UTF-8(<?xml version="1.0" encoding="UTF-8"?>)的文件.我在过去遇到过一些问题,其中发送方的编码声明并不是那么可靠(即文件被声明为具有给定的编码而实际上它们没有),所以我尝试使用http://进行检查utf8checker.codeplex.com/根据此工具,0xF8字节表示此文档不是UTF-8编码的.

但是,相反,此页面将挪威字符'ø'列为UTF-8中的0xF8.(该页面是挪威语,但是,我所指的数据来源于页面底部的表格.)

任何人都可以帮我解决这个问题吗?我在这里感到很困惑.

谢谢!

c# xml encoding utf-8

4
推荐指数
2
解决办法
4227
查看次数

我们不应该在WinForms应用程序中使用System.Web.Caching.Cache类吗?

我看过几篇文章/博客文章,主张在不适用于Web的应用程序中使用System.Web.Caching.Cache,但是,MSDN文档非常明确地指出

Cache类不适用于ASP.NET应用程序之外.它的设计和测试用于ASP.NET,以便为Web应用程序提供缓存.在其他类型的应用程序中,例如控制台应用程序或Windows窗体应用程序,ASP.NET缓存可能无法正常工作.

文档是错误的,还是我们真的不应该使用这个类?如果是后者,会出现什么问题?我们的平台是Winforms/.NET 3.5.

.net caching winforms

3
推荐指数
1
解决办法
2089
查看次数

Scala:将泛型类型参数约束到另一个参数中的类型

我还在努力掌握Scala语言,所以请耐心等待我和我的所有问题.

我可以从绑定中的一个类型参数引用另一个的抽象类型吗?例如,有没有一种方法可以使下面的代码工作?我在这里想要实现的本质是C的MAP参数的KEY应该是参数T的SomeType.

trait T1 { 
    type SomeType;
}

trait MyMap[KEY, VALUE] { ... }


class C { 
  def m[T <: T1, MAP <: MyMap[T.SomeType, Int]] { ... }
}    
Run Code Online (Sandbox Code Playgroud)

generics scala bounds

3
推荐指数
1
解决办法
218
查看次数

没有"@"/字符串文字的SQL Server参数

今天,一个真正难以追踪的错误在我们的项目中体现出来.

我们有一个触发器,在插入或更新数据时执行某些操作,包括调用多个存储过程,并且程序似乎正常工作.除非它没有.

经过几个小时的发型,我们终于找到了罪魁祸首:在EXEC声明中参数名称前面缺少"@".以下最小示例显示了该问题:

CREATE PROCEDURE EchoString @TheString nvarchar(30)
AS
SELECT @TheString 
GO

declare  @MyString char(10) = 'FooBar!'

exec EchoString @MyString
exec EchoString MyString -- Why does this work?
Run Code Online (Sandbox Code Playgroud)

现在,这让我想知道:允许这个的目的是什么?它只是为了向后兼容,还是有合法的用例?是否记录在某处(我的微弱的谷歌搜索显示为空白,但"@"并不是谷歌所能完成的.)

t-sql sql-server parameters string-literals

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

为什么ant认为我有旧版本的Java?

我正在尝试使用ant从源代码(在RH Linux上)构建Groovy,但出于某种原因,它认为我的Java版本是1.4,而不是1.6,因此它不会编译.违规线似乎是

<condition property="groovy.build.vm5">
    <not>
        <contains string="${ant.java.version}" substring="1.4"/>
    </not>
</condition>
Run Code Online (Sandbox Code Playgroud)

在build.xml中.

当我在命令行上键入javac -version时,它显示"javac 1.6.0_11".有任何想法吗?

java ant groovy

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

任何"主要"框架都使用猴子修补/开放课程

我很好奇在Ruby,Python,Groovy等语言中使用称为开放类或猴子修补的功能.此功能允许您在运行时对现有类或对象进行修改(如添加或替换方法).

有没有人知道主要框架(如Rails/Grails/Zope)是否(广泛)使用这个机会来为开发人员提供服务?如果是,请提供示例.

language-agnostic

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