小编djc*_*edo的帖子

Groovy:闭包或方法

我已经养成了在任何地方使用Closures代替常规方法的习惯,即使我不需要访问自由变量.所以,我会用这个:

def addNumbers = { left, right -> left + right }

..而不是这个:

def addNumbers (left,right) { left + right }

这是不好的做法吗?我更喜欢使用闭包而不是方法时获得的额外功能,我更喜欢语法.

谢谢!

groovy closures

37
推荐指数
2
解决办法
9019
查看次数

与Eclipse和IDEA的键盘快捷方式同步?

我花在编程上的时间分为我在工作中做的事情,以及我在业余时间在家做的编程.在工作中,我们使用Vista机器和IntelliJ IDEA 8,而在家里我使用Mac OS X和Eclipse.

你可以想象,当我发现键盘快捷键不同时,我在两者之间轻松切换的能力变得越来越困难.

是否有一种快速标准化Eclipse和IDEA快捷方式的好方法?我认为自己以后大多使用Eclipse,所以我最好转向那个方向.

如果没有,我会手动完成(呃).

eclipse keyboard-shortcuts intellij-idea

13
推荐指数
4
解决办法
1万
查看次数

当Groovy的"metaClass"返回null时

为什么在我需要它时,Groovy的"metaClass"属性返回null.例:

import net.sf.json.groovy.JsonSlurper


@Grab(group='net.sf.json-lib', module='json-lib', version='2.3', classifier='jdk15')

def printMeta(obj) {

   obj.metaClass.properties.each {println "Property: ${it.name}"}
}

def raw = /{"test":"this is a test"}/

def json = new JsonSlurper().parseText(raw);
printMeta (json);
Run Code Online (Sandbox Code Playgroud)

我知道JsonSlurper使用元编程,为什么我会得到以下内容:

Caught: java.lang.NullPointerException: Cannot get property 'properties' on null object at MetaTest.printMeta(MetaTest.groovy:17) at MetaTest.run(MetaTest.groovy:24)

我完全没有想法.

谢谢!

groovy

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

多个域对象"告诉,不要问"

执行涉及多个对象的功能时,如何遵循"Tell,Do not Ask"原则.

示例 - 生成报告

我有以下对象(仅用于说明目的):

汽车,马,兔子

这些对象之间没有关系,但我确实希望基于这些对象生成报告:

createHtmlReport(Car car, Horse horse, Rabbit rabbit){
    Report report = new Report()

    report.setSomeField(car.getSerialNumber())
    report.setAnotherField(horse.getNumberOfLegs())
    // ...etc       
}
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是它必须从每个对象"拉"数据,这违反了"告诉,不要问"规则.我宁愿隐藏每个对象的内部,让它们为我生成一个报告:

car.createHtmlReport()   
horse.createHtmlReport()
rabbit.createHtmlReport()
Run Code Online (Sandbox Code Playgroud)

...但是我得到了3份部分报告.此外,我认为Rabbit不应该知道如何生成我需要的每个报告(HTML,JMS,XML,JSON ....).

最后,在生成报告时,我可能想要打开多个项目:

if (car.getWheels() == 4 || horse.getLegs() == 4)
    // do something
Run Code Online (Sandbox Code Playgroud)

oop domain-driven-design tell-dont-ask

7
推荐指数
2
解决办法
1434
查看次数

使用Node.js在Mongo DB中存储JS函数的问题

我有一个简单的JS类:

var User = function(id){
    this._id = id;
    this.sayHello = function (){
        return "hello";
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我使用默认的Node.js驱动程序将其存储在MongoDB中:

users.insert(new User(1));
Run Code Online (Sandbox Code Playgroud)

最后,我检索用户,并尝试执行该功能:

users.findOne({_id:1}, function(err, item) {
    console.log("Say hello: " + item.sayHello());
});
Run Code Online (Sandbox Code Playgroud)

我收到以下错误,这真的令人困惑:

    throw err;
          ^
TypeError: Object #<Object> has no method 'sayHello'
Run Code Online (Sandbox Code Playgroud)

我完全迷失在这一个.我的理解是MongoDB按原样存储了JS函数和属性.如果不是这样,你能推荐我如何解决这个问题吗?

谢谢!

javascript mongodb node.js

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

在正则表达式中使用子串两次

首先,这个问题之前可能已被问过,但我不确定要搜索的短语.

我有一个字符串:

Maaaa

我有一个模式:

AAA

我想匹配两次,给我起始索引为1和2.但当然我只得到一个匹配(起始索引1),因为正则表达式引擎吞噬所有3"a"并且不能再次使用它们留给我一个不匹配的"a".

我该如何解决这个问题?

谢谢!

regex

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

在我的系统中模拟/测试核心对象

我被要求改变一些对我们工作的系统来说是核心的类.有问题的类每个都需要5-10个不同的相关对象,这些对象本身需要相同数量的对象.

数据也从几个数据源中提取,项目使用EJB2,因此在测试时,我运行时没有容器来引入我需要的依赖项!

我开始对这项任务感到不知所措.我已经尝试过使用JUnit和Easymock进行单元测试,但是只要我模拟或存根一件事,我发现它需要更多.所有东西似乎都是紧密耦合的,所以我用我的存根达到了大约3或4级,以防止NullPointerExceptions.

通常使用这种类型的任务,我只需要进行更改和测试.但最短的构建周期大约是10分钟,我喜欢在执行之间进行非常短的迭代编码(可能因​​为我对编写完美代码的能力不太自信).

任何人都知道一个好的策略/工作流程来摆脱这个泥潭?

java unit-testing mocking

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