grails 中 -> 和 ? 以及*.

grails 中 -> 和 ? 以及*.

收藏》》http://blog.sina.com.cn/s/blog_537517170102uxj5.html     多谢了!

  (2014-07-22 11:19:19)
 分类: Grails学习
初学grails,对bootsrap.goovy 中的 servletContext -> 一头雾水,这是groovy中的简写方式,用于将参数params传递给谁,
例如  MyObject mo ->   其实相当于   MyObject mo = new MyObject(params);
即传递一个 实例mo
例如  在controller 中 validate,调用commond,将params传入commond类中

class MemberController { 

    def search = { SearchCommand cmd ->       

 if (cmd.hasErrors()) {            

redirect(action:'error')       

 } else { 

            // do something else  

        }     } }

----------------------------------

class SearchCommand {    

String teamname    

String username   

 String gender 

    static constraints = { 

        gender (inList:[ "F", "M"])    

} }




?.
用于判断非空,如  man 类, 包含 man.name, man.age。
在JAVA内一般情况下需要判断
if(man!=null){
   if (man.name!=null){
   System.out.println(man.name);
   }
}
而在 groovy中 ,直接简化 成
print man?.name
如果  man为空,返回null
groovy中还可以链式   man?.name?.age
例如 页面中

 

如果member不为空,返回member.phone,否则返回空字符串,同样道理,如果member.phone不为空,返回member.phone.encodeAsHTML()



另外 ?还有另个用途,就是JAVA的三元
 man.name==null?"":man.name
可直接写成
man.name? :""
即:前的不为空为本身的部分可省。


“*.”操作符。
     
      def list = ['abc','yyyy','1234467']
     
      def sizes = list*. size()
     
     sizes. each{
         println it
     }
 
打印的结果为:
3
4
7
 
通过上面的例子,我们可以知道,“*.”操作符的操作对象是一个List对象,如上面的list对象;然后它的结果也是一个List对象;最后还有一个size()方法,是在取元素的长度。
通过结果,我们知道,我们的“*.”操作符首先对list对象的每一个元素进行size()运算,然后把运算得到的每一个结果作为元素组成一个新的list对象sizes。
可以知道,上面的“*.”操作符的运算相当于下面的代码:
     
      def list = ['abc','yyyy','1234467']
     
      def sizes = list. collect{
        it. size()
     }
     
     sizes. each{
         println it
     }
     
同样的结果,但上面的代码比起“*.”操作符就麻烦多了。知道了“*.”操作符的作用,我们就可以对它进行更多的应用。
假设我们有如下的一个GroovyBean:
class Empl
{
    String name
     int age
}
 
我们现在有一个Empl对象为元素的List对象:
def list = [ new Empl(name:'Tom',age:12), new Empl(name:'Alice',age:15), new Empl(name:'Rose',age:20)]
   
现在,我们要取得每一个元素的age,组成一个新的List对象:
 
        def sizes = list*.age
   
 
下面我们来测试:
      
       sizes. each{
            println it
       }
   
结果为:
12
15
20

转载于:https://www.cnblogs.com/redaygo-1/p/5590379.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值