我正在尝试学习如何使用(和扩展)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) 鉴于以下计划:
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做什么?
据我所知,根据此图表,从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)上运行它.
我收到一份声称是UTF-8(<?xml version="1.0" encoding="UTF-8"?>)的文件.我在过去遇到过一些问题,其中发送方的编码声明并不是那么可靠(即文件被声明为具有给定的编码而实际上它们没有),所以我尝试使用http://进行检查utf8checker.codeplex.com/根据此工具,0xF8字节表示此文档不是UTF-8编码的.
但是,相反,此页面将挪威字符'ø'列为UTF-8中的0xF8.(该页面是挪威语,但是,我所指的数据来源于页面底部的表格.)
任何人都可以帮我解决这个问题吗?我在这里感到很困惑.
谢谢!
我看过几篇文章/博客文章,主张在不适用于Web的应用程序中使用System.Web.Caching.Cache,但是,MSDN文档非常明确地指出
Cache类不适用于ASP.NET应用程序之外.它的设计和测试用于ASP.NET,以便为Web应用程序提供缓存.在其他类型的应用程序中,例如控制台应用程序或Windows窗体应用程序,ASP.NET缓存可能无法正常工作.
文档是错误的,还是我们真的不应该使用这个类?如果是后者,会出现什么问题?我们的平台是Winforms/.NET 3.5.
我还在努力掌握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) 今天,一个真正难以追踪的错误在我们的项目中体现出来.
我们有一个触发器,在插入或更新数据时执行某些操作,包括调用多个存储过程,并且程序似乎正常工作.除非它没有.
经过几个小时的发型,我们终于找到了罪魁祸首:在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)
现在,这让我想知道:允许这个的目的是什么?它只是为了向后兼容,还是有合法的用例?是否记录在某处(我的微弱的谷歌搜索显示为空白,但"@"并不是谷歌所能完成的.)
我正在尝试使用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".有任何想法吗?
我很好奇在Ruby,Python,Groovy等语言中使用称为开放类或猴子修补的功能.此功能允许您在运行时对现有类或对象进行修改(如添加或替换方法).
有没有人知道主要框架(如Rails/Grails/Zope)是否(广泛)使用这个机会来为开发人员提供服务?如果是,请提供示例.