在Groovy中,有一个很好的语法来处理null值.
例如,我可以做一个if语句:
if (obj1?.obj2?.value) {
}
Run Code Online (Sandbox Code Playgroud)
即使obj1为null(它将评估为false),也不会抛出NullPointerException.
这是非常方便的,所以想知道我是否错过了Ruby等价物.
以下代码尝试替换Groovy类中的现有方法:
class A {
void abc() {
println "original"
}
}
x= new A()
x.abc()
A.metaClass.abc={-> println "new" }
x.abc()
A.metaClass.methods.findAll{it.name=="abc"}.each { println "Method $it"}
new A().abc()
Run Code Online (Sandbox Code Playgroud)
它会产生以下输出:
original
original
Method org.codehaus.groovy.runtime.metaclass.ClosureMetaMethod@103074e[name: abc params: [] returns: class java.lang.Object owner: class A]
Method public void A.abc()
new
Run Code Online (Sandbox Code Playgroud)
这是否意味着当通过将元类设置为闭包来修改元类时,它并不真正替换它,而只是添加它可以调用的另一个方法,从而导致元类有两个方法?是否有可能真正替换方法,以便第二行输出打印"新"?
在试图找出它时,我发现DelegatingMetaClass可能有所帮助 - 这是最Groovy的方法吗?
我正在使用Groovy语言,它具有动态类型(以及可选的静态类型).它还具有对列表,地图和范围的本机支持,因此我发现自己使用列表和地图很多,尤其是列表列表,地图列表,列表地图等.
在静态语言(尤其是泛型)中,您始终可以了解您的类型.我对动态语言相当新,而且跟踪我的变量应该是什么有点困难,所以我想知道其他人是否使用某种变量命名约定来保持这些.
例如,假设我有一个日期为键的映射,而整数为值.或整数列表,或包含字符串作为键和帐户对象作为值的映射列表.
似乎在变量名后面创建一个明确的约定将帮助我跟踪我正在处理的数据类型结构,而不必查找它.
有小费吗?
language-agnostic variables groovy naming-conventions dynamic-typing
我需要对有关季节的一些信息进行建模,并需要以与年份无关的方式根据开始/结束日期跟踪它们。即我需要允许用户将夏天定义为介于 5 月 15 日和 9 月 10 日之间,并且所有年份都这样做。
我需要对 isThisDateInSeason 类型进行大量检查)。所有日期操作功能(即日期、日历)似乎只适用于有效日期,即包括年份信息。
有没有关于如何做到这一点的最佳实践?我可以想到一堆hacky方法(即存储月份和月份的日期或存储日期并将它们带到基线年份以便我可以比较),但似乎可能有更好的方法.
我正在用 Java 或 Groovy 写这个。
将在乔达,时间在这里库的帮助?我没有这方面的经验,但它看起来有更多的灵活性。
我正在为公共Web应用程序寻找安全的用户登录/会话管理组件.Spring Security似乎有潜力,还有其他高质量的替代品吗?
从概念上讲,这很容易,我们目前的代码工作正常,但我宁愿使用已经公开审查过的安全漏洞代码.
需求:
我意识到这个问题很可能会得到很多"依赖",但无论如何我很好奇.当你雇用一些新的(但经验丰富的)团队时,他们没有你正在使用的技术专业知识,但是他们知道类似的东西,你花了多少时间让他们"上网".
我说的是一些相当实质的东西,比如语言,或者有很多方法可以做的框架/产品.显然,许多库只需要很少的时间就可以开始使用.
根据我自己的经验(10年的经验,包括大量的咨询,所以学习新技术是课程的标准),我需要大约三到六个月的经验才能熟练掌握新技术,大约一年感觉我正在接近专家级别,在那里我了解所有基础知识和中等难度问题,以及一些非常好的领域.
你在项目中做了什么?你如何预算学习时间.
我有一个域对象,它包含基于同一域对象属性的参数的计算结果.我想确保用户更改任何时间参数,它会重新计算并正确保存到数据库中.
我试图用afterInsert(以确保计算首先是正确的)和afterUpdate.
但是,由于我的计算试图修改对象本身,它不起作用 - 抛出各种hibernate异常.
我试图将afterUpdate代码放入事务中,但这没有帮助.我担心我会在这里遇到循环依赖问题.
我现在得到的例外是:
org.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [esc.scorecard.PropertyScorecard#27]
Run Code Online (Sandbox Code Playgroud)
GORM活动是否针对更简单的用例而设计?我很想得出结论,修改你正在保存的对象是不可取的.
我需要在页面上每行显示三个元素,从我作为数组获取的数据,所以希望能够引用数组中的特定元素.
即如果我的数组是bookList,我希望能够获得bookList的第3个元素,所以我可以将它传递给指令,例如.看不到一个简单的方法来做到这一点.
[编辑]
{{bookList[2]}}
Run Code Online (Sandbox Code Playgroud) 我正在编写一些代码来将一些引导数据加载到我的Grails应用程序中.有些东西不能用于我正在尝试创建的类之一,因此能够以交互方式针对grails运行时环境运行该代码非常方便,我想知道是否有办法做到这一点.
我知道Grails控制台,但似乎没有加载我想要与之交互的自举数据.我也在调试时看到了这个线程 - 是否有任何IDE允许交互式shell进入运行时?似乎Debug Plugin计划提供这个,但还没有.
我发现这个脚本允许你从Grails上下文执行一个脚本,但我想要一些更具互动性的东西.
我在Grails 1.1上.