[Groovy] 从java过渡groovy
suifongqi
2009-11-13
groovy本其官方形容成JVM上的天使语言,确实也挺不错,开发起来也挺方便。而且从java过度groovy也很快。下面来谈谈我过渡这段时间遇到的问题吧。。。
首先选择合适的开发工具:eclipse虽然方便,但插件版本实在难把握,更新了几个groovy的插件都没法使。所以。。我用了intellij8 首先我创建了一个groovy script,代码如下: tmp = 10 println(tmp) tmp = "abc" println(tmp) //*************对比下面代码******************** def tmp = 10 println tmp def tmp = "abc" println tmp 第一部分代码打印结果是10和abc;第二部分代码编译不过,因为重复定义了变量名tmp 疑问 1 资料上说定义变量需要使用def关键字,但是第一部分代码,我没定义还不是照样用 那么用与不用def定义有什么区别吗? 嘿嘿,我想聪明人这时会用反编译器去了。先卖个关子这里我先不提。继续看代码 //设想方法定义前能否省略掉def a()//能编译过吗? { } def a() { } 遗憾的是方法必须得使用def。继续往下 //注意该代码写在groovy script中,非groovy类中 def c =10; def a() { println(c) } a() //**********对比如下代码************************** c =10; def a() { println(c) } a() 在不看运行结果前,根据之前的实验用与不用def声明定义变量效果都一样. 运行代码.... 吃惊的发现第一部分代码运行不过,无法打印;第二部分代码输出10 第一部分代码报错提示如下: Caught: groovy.lang.MissingPropertyException: No such property: c for class: s1 在不去看反编译结果前,我继续做了下面的测试 def a() { def c=10 println(c) } a() //***************对比****************** def a() { c=10 println(c) } a() //**************对比***************** def a() { int c=10 println(c) } a() 运行发现:以上结果打印10.。。。呵呵继续往下,再次提醒以上代码都是在groovy script文件中编写,并非类里。 通过反编译器大致可以得出如下结论:在方法a()外用def定义的变量c,其作用范围是在run方法中,而run方法与a方法平级,方法a当然就不能调用.至于不用def在外定义可用,大家下来研究研究。 下面创建一个groovy的class,在里面做一些实验 public class c1 { def r = 1000; def a() { def r="abc" println(r) } public static void main(String[] args) { def cc1 = new c1()//能否换成cc1 = new c1()或者 c1 cc1 = new c1()? cc1.a() println(cc1.getR()) } } 考虑:代码能否编译?是否出现重命名的问题?如果可以运行println(r)的结果应该是多少?考虑主函数中的代码替换问题。 结果是:运行正确,打印abc,1000 主函数当中的代码能做替换吗? 能把def r="abc"换成 String r="abc"吗? 今天就先这些吧,避免把大家搞晕了 |
|
helian
2009-11-15
|
|
清风车影
2009-11-17
有空可以交流一下,我公司用grails一年多了.感觉还不错,有一点比较烦的就是,出了问题有时候不怎么办.查资料都没法查.groovy grails在国内用得非常少.
|
|
helian
2009-11-17
清风车影 写道 有空可以交流一下,我公司用grails一年多了.感觉还不错,有一点比较烦的就是,出了问题有时候不怎么办.查资料都没法查.groovy grails在国内用得非常少.
英文过得去的话去社区的mail list问吧 |